Xpath 问题,如果您知道元素的标题,则获取元素的 id(属性)

2024-01-07

这是我的XML文件,我想知道如何获取文章的ID 标题是什么。使用 Xpath 可以吗?

XML 文件:

<Articles>
    <Article ID="1">
        <title>test</title>
        <content>test</content>
    </Article>
</Articles>

php代码:

$dom = new DOMDocument;
$dom->load("Articles.xml");
$xp = new DOMXPath($dom);
$id = $xp->evaluate('string(/Articles/Article[title="test"]/@ID)');
var_dump($id);

亲切的问候,

User.


只要您使用 SimpleXml,就无法直接返回 ID。正确的 XPath 是

/Articles/Article[title="crack"]/@ID

正如其他地方已经显示的那样。但SimpleXml没有属性节点的概念。它只知道 SimpleXmlElements。所以你也可以获取 Article 节点

/Articles/Article[title="crack"]

因为最终你必须执行以下操作才能获取 ID 值:

echo $articles[0]['id'];

请注意,从 SimpleXml 元素访问属性时不需要 @。

如果你想直接获取 ID 属性,你必须使用 DOM (codepad http://codepad.org/oZYy9JNI)

$dom = new DOMDocument;
$dom->loadXml($xml);
$xp = new DOMXPath($dom);
$id = $xp->evaluate('string(/Articles/Article[title="crack"]/@ID)');
var_dump($id);

只要没有其他节点的 title 元素的值等于“crack”,上面的代码就会返回 1。

如果您有带格式的节点,就像你的截图所示 http://i53.tinypic.com/11hewjr.png,您必须在测试值之前清理元素。否则,将考虑用于格式化文档的空白。 XPath 是

string(/Articles/Article[normalize-space(title) = "crack"]/@ID)

如果您想搜索标题为contains“破解”部分,使用

string(/Articles/Article[contains(title, "crack")]/@ID)

请注意,只要只有一个结果,这仍然只会立即返回 ID。如果有多个匹配节点,则返回第一个ID值。使用

/Articles/Article[contains(title, "crack")]/@ID

返回所有匹配节点的 DOMNodeList,然后迭代它们以获取它们各自的 ID 值。

另请参阅PHP 手册中 SimpleXml 的基本使用示例 https://www.php.net/manual/en/simplexml.examples-basic.php

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xpath 问题,如果您知道元素的标题,则获取元素的 id(属性) 的相关文章

随机推荐