这是我的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);
亲切的问候,
用户。
答案 0 :(得分:2)
只要您使用的是SimpleXml,就无法直接返回ID。正确的XPath将是
/Articles/Article[title="crack"]/@ID
如其他地方所示。但是SimpleXml没有Attribute节点的概念。它只知道SimpleXmlElements。所以你也可以改为获取文章节点
/Articles/Article[title="crack"]
因为最后您必须执行以下操作才能获得ID值:
echo $articles[0]['id'];
请注意,从SimpleXml元素访问属性时不需要@。
如果您想直接获取ID属性,则必须使用DOM(codepad)
$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.
如果您的节点具有格式like shown in your screenshot,则必须在测试值之前清理该元素。否则,将考虑用于格式化文档的空格。 XPath就是
string(/Articles/Article[normalize-space(title) = "crack"]/@ID)
如果您要搜索标题包含“破解”的文章,请使用
string(/Articles/Article[contains(title, "crack")]/@ID)
请注意,只要只有一个结果,这仍然只会立即返回ID。如果存在多个匹配节点,则将返回第一个ID值。使用
/Articles/Article[contains(title, "crack")]/@ID
返回所有匹配节点的DOMNodeList,然后迭代它们以获取它们各自的ID值。
答案 1 :(得分:0)
路径
/Articles/Article[title = "crack"]/@ID
应该这样做。您不必遍历节点。