PHP XMLreader 从复杂节点获取子详细信息


php xmlreader get child details from complex node

好的,所以我不确定节点这部分的正确术语是什么,但我正在尝试从 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->read(); 从 XML 中提取节点。你必须有可能。在验证Location*标记名的条件中放置一些逻辑。它需要读取子节点才能获取en元素节点。

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

  • DOM 示例:https://stackoverflow.com/a/23079179/2265374
  • 简单 XML 示例:https://stackoverflow.com/a/24084918/2265374