这是我正在使用的XML代码:
<inventory>
<drink>
<lemonade supplier="mother" id="1">
<title>Super Lemonade</title>
<price>$2.50</price>
<amount>20</amount>
</lemonade>
<lemonade supplier="mike" id="4">
<title>Lemonade Plus</title>
<price>$3.00</price>
<amount>20</amount>
</lemonade>
<pop supplier="store" id="2">
<title>Poppys</title>
<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;
}
?>
该代码运行良好,按预期输出所有柠檬水价格值。
现在我需要一个XPATH来获取金额= 20的所有项目的TITLE和SUPPLIER。
我该怎么做?
谢谢
答案 0 :(得分:4)
通常,您希望在//
搜索上使用直接路径,因为它更快:
/inventory/drink/lemonade[amount=20]/title
和
/inventory/drink/lemonade[amount=20]/@supplier
您可以将两个XPath查询与|
(UNION)运算符组合在一起,然后返回四个节点。
使用DOM编程访问属性的解释如下:
您可以在
找到一个好的XPath教程答案 1 :(得分:1)
使用强>:
/*/*/*[amount = 20]/@supplier | /*/*/*[amount = 20]/title
选择:
任何元素的任何supplier
属性都是XML文档顶级元素的子元素(与/inventory/drink/lemonade
相同,但我喜欢编写更短的XPath表达式),其amount
子项具有可转换为数字20的字符串值。
任何元素的任何title
子元素都是XML文档顶级元素的子元素(与/inventory/drink/lemonade
相同,但我喜欢编写更短的XPath表达式),其amount
子项具有可转换为数字20的字符串值。
基于XSLT的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="node()|@*">
<xsl:for-each select=
"/*/*/*[amount = 20]/@supplier
|
/*/*/*[amount = 20]/title">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<inventory>
<drink>
<lemonade supplier="mother" id="1">
<title>Super Lemonade</title>
<price>$2.50</price>
<amount>20</amount>
</lemonade>
<lemonade supplier="mike" id="4">
<title>Lemonade Plus</title>
<price>$3.00</price>
<amount>20</amount>
</lemonade>
<pop supplier="store" id="2">
<title>Poppys</title>
<price>$1.50</price>
<amount>10</amount>
</pop>
</drink>
</inventory>
它评估XPath表达式并在单独的行上复制所选模式的值:
mother
Super Lemonade
mike
Lemonade Plus
请注意:
使用诸如 the XPath Visualizer 之类的工具可以极大地帮助您学习XPath - 成千上万的人使用它来学习XPath的有趣方式。