gpt4 book ai didi

php - PHP SimpleXML xpath查询结果

转载 作者:行者123 更新时间:2023-12-03 16:17:01 25 4
gpt4 key购买 nike

我已经进行了搜索,发现的答案似乎表明了我的理解。显然我缺少了一些东西。我对xPath查询的结果感到困惑。我简化了我的问题,以便在此处发布测试用例。

我的真实xml在不同深度具有多个数据集节点。最终,我想获取具有给定标签的每个数据集元素,然后在其上循环并获取字段值(在不同位置(或深度),因此我认为我需要xpath)。我可以使用xpath获得我想要成功的数据集元素。但是,当我随后在该结果对象上运行xpath时,它将获得我想要的字段以及所有其他字段。我不知道为什么它不只返回field1,field2和field3。当我print_r($ value [0])时,它仅显示我想要的字段。但是,当我在$ value [0]上运行xpath时,它将返回xml文档中的所有字段。

样本XML

<myxml>
<dataset label="wanteddata" label2="anotherlabel">
<dataitem>
<textdata>
<field label="label1">field1</field>
<field label="label2">field2</field>
<field label="label3">field3</field>
</textdata>
</dataitem>
</dataset>
<dataset label="unwanteddata" label2="unwantedanotherlabel">
<dataitem>
<textdata>
<field label="label4">field4</field>
<field label="label5">field5</field>
<field label="label6">field6</field>
</textdata>
</dataitem>
</dataset>
</myxml>


这是测试代码。

$xmlstring = file_get_contents('simplexml_test.xml');
$xml = simplexml_load_string($xmlstring);
if ($xml === false) {
throw new Exception("Failed to load");
}

$value = $xml->xpath('//dataset[@label="wanteddata"]');
print_r($value[0]->xpath('//field'));


代码输出:

Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[label] => label1
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[label] => label2
)
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[label] => label3
)
)
[3] => SimpleXMLElement Object
(
[@attributes] => Array
(
[label] => label4
)
)
[4] => SimpleXMLElement Object
(
[@attributes] => Array
(
[label] => label5
)
)
[5] => SimpleXMLElement Object
(
[@attributes] => Array
(
[label] => label6
)
)
)

最佳答案

//field选择整个XML文档中的所有<field>元素,无论您从哪个XPath调用上下文节点。要使XPath注意上下文节点,您需要在XPath的开头添加一个点(.)。在XPath中,(.)引用当前上下文节点:

print_r($value[0]->xpath('.//field'));

关于php - PHP SimpleXML xpath查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910868/

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