gpt4 book ai didi

php - 如何在PHP中使用XPath获取包含特定子节点的所有XML节点

转载 作者:行者123 更新时间:2023-12-03 16:15:22 29 4
gpt4 key购买 nike

我正在尝试找到一种方法,以了解如何正确使用xpath选择某些元素,而我的解决方案部分起作用,并且我不知道如何解决它。

这是一个示例xml:

<Database>
<Items>
<Item>
<Name>A</Name>
<Locations>
<Location>A</Location>
<Location>B</Location>
<Location>C</Location>
</Locations>
</Item>
<Item>
<Name>B</Name>
<Locations>
<Location>E</Location>
</Locations>
</Item>
<Item>
<Name>C</Name>
<Locations>
<Location>D</Location>
<Location>E</Location>
</Locations>
</Item>
</Items>
</Database>


而且我正在使用此php代码获取包含位置“ E”的所有项目

$LocationFilter = "E" //hard written, it's actually a GET param
$filter = $xml->xpath("//Items/Item[contains(Locations/Location,'".$LocationFilter."')]");

foreach ($filter as $Item) {
echo($filter->Name);
}


并且我没有得到BC(项目名称),而是得到了B,或者换句话说,我只得到了第一个位置为E的那些项目,而不是所有在任何位置上包含E的那些项目。

我不确定这为什么行不通,但是我希望我已经对它进行了充分的解释。

最佳答案

contains()希望将单例作为第一个参数传递。如果收到多个节点,则只会评估第一个。这解释了为什么XPath在测试中没有返回名称为ItemC的原因。

在必须使用contains()的情况下,正确的方法是将方法应用于单个Location元素:

//Items/Item[Locations/Location[contains(.,'E')]]

关于php - 如何在PHP中使用XPath获取包含特定子节点的所有XML节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190594/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com