只要您使用 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