Итак, я не уверен, что правильный термин для этой части узла, но я пытаюсь получить данные от узла Location1.
Вот XML
<ID>123344</ID>
<Name><![CDATA[The Pavillion]]></Name>
<Date>2014-07-07</Date>
<Country>United Kingdom</Country>
<Location1 GeonameID="8000001"><en><![CDATA[England]]></en></Location1>
<Location2 GeonameID="8000911"><en><![CDATA[West Yorkshire]]></en></Location2>
Вот как я получаю правильные значения для ID и имени
if ($xml->name == 'ID') { $xml->read(); $ref = $xml->value; }
if ($xml->name == 'Name') { $xml->read(); $name = $xml->value; }
Но как мне получить значение узла Location1, которым будет Англия. Я пробовал это, но это не работает.
if ($xml->name == 'Location1') { $xml->read(); $name = $xml->value->en; }
Я привык использовать simplexml, а не xmlreader, но я заблудился о том, как получить значение из чего-либо, кроме простого узла.
Очень признателен
XMLReader не имеет автоматического сопоставления. Вещи как $xml->value->en;
не будет работать.
XMLReader извлекает узел из XML с помощью $xml->read();
, У вас есть возможности. Поместите немного логики в условие, которое проверяет Location*
название тэга. Нужно прочитать дочерние узлы, чтобы получить en
элемент узла.
Или позвольте XMLReader развернуть внешний узел (родительский узел размещенного вами фрагмента XML) в DOM. Затем вы можете использовать Xpath или преобразовать его в SimpleXMLElement.
Других решений пока нет …