php xmlreader从复杂节点获取子详细信息

时间:2014-11-13 00:19:28

标签: php xml xmlreader

好的,所以我不确定该部分节点的正确用语是什么,但我试图从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,但我对如何从一个简单节点以外的任何东西获取值感到迷茫。

非常感谢

1 个答案:

答案 0 :(得分:0)

XMLReader没有自动映射。像$xml->value->en;这样的东西是行不通的。

XMLReader使用$xml->read();从XML中提取节点。你有可能。将一些逻辑置于验证Location*标记名的条件中。它需要读取子节点以获取en元素节点。

或者让XMLReader将外部节点(您发布的XML片段的父节点)扩展为DOM。然后,您可以在其上使用Xpath或将其转换为SimpleXMLElement。