我正在尝试从XML文档中提取数据。 XML文档中的所有节点都有名称空间,我正在使用PHP XPath,它支持具有名称空间的节点(例如,其中带有:的元素名称),如下所示:
<person:address> ... </person:address>
XML文档具有一个数据系列列表,每个数据系列包含元数据以及数据观察值。
我正在使用以下语法注册所有名称空间(有效): $ XPath-> registerNameSpace('NameSpace','http://www.something.com/subfolder');
然后我得到所有保存数据系列信息的父节点:
$DataSeriesNodes = $XPath->query('//NameSpace:DataSeries');
然后我遍历父节点:
foreach ( $DataSeriesNodes as $Index=> $Node ) ...
面临的挑战是如何然后查询每个$ Node。根据我的研究,我知道您可以在XPath-> query()中将要查询的节点添加为第二个参数,以避免在XML根目录上进行查询。我已经尝试过了:
$Data = $XPath->query('NS2:Info', $DataSeriesNodes[$Index]);
但这对我不起作用,它仍然查询XML根,不仅查询子元素$ DataSeriesNodes [$ Index]。
我遇到的其他方法由于使用了名称空间而无法工作(例如-> getElementByTagName在带有冒号的节点上不起作用)。 我很欣赏您可以为每个子元素编写单独的XPath-> query(),但是我想遍历父节点并在循环内将相关子节点作为目标信息,因为它更灵活(是多个XML文档,每个文档可能具有不同数量的数据系列。
使用XPath或任何其他方法来查询循环中的子节点是否可能?我不喜欢XPath,但是该方法必须能够使用其中的:处理名称空间/元素。 我花了2天的时间进行研究,并尝试将所有可以在StackExchange上找到的内容包括在内。
非常感谢, 克里斯