Получить элемент внутри нескольких пространств имен xml

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

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>";
}

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]