gpt4 book ai didi

php - SimpleXML xpath 到具有特定属性值的元素?

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

我有一些这样的 XML:

<item>
<custom-attributes>
<custom-attribute attribute-id="taco">false</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="en-US">testValue</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="default">testing123</custom-attribute>
</custom-attribute>
</item>

如何使用 xpath 查找 custom-attribute元素的属性 ID 为 taco ?

如何使用 xpath 查找 custom-attribute属性 ID 为 htmlContent 的元素?在这种情况下有 2 个。这些也有命名空间。我不确定这是否重要。

我尝试过这样的事情:
var_dump($xml->xpath("custom-attribute[@attribute-id='taco']"));

但这不起作用。我可以遍历 custom-attribute元素并寻找我需要的东西,但是通过 xpath 简单地选择它会容易得多.

我在这里想念什么?

最佳答案

在 xpath 的开头添加双斜杠:

$source = <<<X
<item>
<custom-attributes>
<custom-attribute attribute-id="taco">false</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="en-US">testValue</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="default">testing123</custom-attribute>
</custom-attributes>
</item>
X;

$xml = new SimpleXMLElement($source);

$taco = $xml->xpath("//custom-attribute[@attribute-id='taco']")[0];
$htmlContentArray = $xml->xpath("//custom-attribute[@attribute-id='htmlContent']");

echo "taco : ", $taco, PHP_EOL;
echo "htmlContent: ", implode(', ', $htmlContentArray), PHP_EOL;

输出:
taco       : false
htmlContent: testValue, testing123

更新

对于您在评论中的问题,关于在 item 节点中进行搜索;您可以使用 .// 从当前节点开始搜索。
// Find an item, then do an xpath on the result of that
// to find the custom attribute element.
// <items> tag added as <item> would otherwise be the root element,
// which would make the example quite pointless.
$source = <<<X
<items>
<item>
<custom-attributes>
<custom-attribute attribute-id="taco">false</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="en-US">testValue</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="default">testing123</custom-attribute>
</custom-attributes>
</item>
<item>
<custom-attributes>
<custom-attribute attribute-id="taco">true</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="en-US">item 2 testValue</custom-attribute>
<custom-attribute attribute-id="htmlContent" xml:lang="default">item 2 testing456</custom-attribute>
</custom-attributes>
</item>
</items>
X;

$xml = new SimpleXMLElement($source);

$item = $xml->item[1]; // Get second item
$taco = $item->xpath(".//custom-attribute[@attribute-id='taco']");
$htmlContentArray = $item->xpath(".//custom-attribute[@attribute-id='htmlContent']");

echo "taco from second item: ", $taco[0], PHP_EOL;
echo "html from second item: ", implode(', ', $htmlContentArray), PHP_EOL;

输出:
taco from second item: true
html from second item: item 2 testValue, item 2 testing456

关于php - SimpleXML xpath 到具有特定属性值的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28708250/

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