2014-12-02 2 views
1

Я попытался получить элемент DistrictName внутри пространств имён `// ns1: Location // ns1: District, но ничего не возвращается. Вот что я сделал до сих пор.Получить элемент внутри нескольких пространств имен xml

foreach($xml1->xpath('//ns1:Venue') as $header){ 
    $result = ($header->xpath('//ns1:Venue//ns1:Location//ns1:District//ns1:DistrictName')); // Should output 'something'. 
    echo "Local2: " . (string) $result[0]. "</br>"; 
} 

soap_response_xml:

... 
<ns1:Venue> 
    <ns1:Name>Rock</ns1:Name> 
    <ns1:Contact> 
    <ns1:Name>Rock</ns1:Name> 
    </ns1:Contact> 
    <ns1:Location> 
    <ns1:District> 
     <ns2:DistrictId>11</ns2:DistrictId> 
     <ns2:DistrictName>XXXXXXX</ns2:DistrictName> 
    </ns1:District> 
    <ns1:Municipaly> 
     <ns2:MunicipalityId>1111</ns2:MunicipalityId> 
     <ns2:MunicipalityName>XXXXXXXXX</ns2:MunicipalityName> 
    </ns1:Municipaly> 
    </ns1:Location> 
</ns1:Venue> 

, что я делаю не так?

ответ

1

Если ваш XML в строке, самое простое, может удалить пространство имен:

$string = str_replace(array('ns1:', 'ns2:'), array('', ''), $string); 
$xml = new SimpleXMLElement($string); 
foreach($xml->xpath('//Venue') as $header){ 
    $result = ($header->xpath('Location/District/DistrictName')); // Should output 'something'. 
    echo "Local2: " . (string) $result[0]. "</br>"; 
} 

Также: не используйте //, когда это не нужно. // означает «потомок». Сепаратор пути /

+0

спасибо за ваше предложение, отлично работает :) – seal

Смежные вопросы