这是我正在使用的XML代码:
<inventory>
<drink>
<lemonade supplier="mother" id="1">
<price>$2.50</price>
<amount>20</amount>
</lemonade>
<lemonade supplier="mike" id="4">
<price>$3.00</price>
<amount>20</amount>
</lemonade>
<pop supplier="store" id="2">
<price>$1.50</price>
<amount>10</amount>
</pop>
</drink>
</inventory>
然后我写了一个简单的代码来练习使用XPath:
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml');
$xpathvar = new Domxpath($xmldoc);
$queryResult = $xpathvar->query('//lemonade/price');
foreach($queryResult as $result) {
echo $result->textContent;
}
?>
该代码运行良好,按预期输出所有柠檬水价格值。现在,当我更改查询字符串以仅选择属性设置为特定值的元素时,如
//柠檬水[供应商= “母亲”] /价格
或
//柠檬水[ID = “1”] /价格
它不起作用,根本没有输出。我做错了什么?
答案 0 :(得分:33)
试试这个:
//lemonade[@id="1"]/price
或
//lemonade[@supplier="mother"]/price
如果没有“@”,它会查找具有该名称而不是属性的子元素。
答案 1 :(得分:8)
这只是切线相关,但是当您在对其知道结构的文档上使用XPath时,不使用“// some-element-name”。这是一个非常好的快速示例,但是当你使用该查询命中一个巨大的xml文件时,特别是如果它后面跟着复杂的东西,你很快就会遇到性能问题。
库存/饮料/柠檬水[@供应商= “母亲”] /价格
答案 2 :(得分:7)
你必须使用@符号来表示谓词中的属性,如://lemonade[@supplier="mother"]/price
,这就是全部。