XPath - 查询不完全匹配的文本字符串

时间:2014-02-08 21:51:44

标签: php xml xpath

我正在使用XPath的contains函数来查询下面XML文件的“description”元素。当使用“全新”进行查询时(如下面的xpath表达式代码所示),它将检索XML数据。但是,如果使用“低价全新”,则不会检索到任何内容。显而易见的结论是,contains函数只检索精确匹配的文本字符串,如果单词彼此分开,则不起作用,如下面的description元素所示。

当使用字符串“low price new new”查询description元素时,XPath是否有一个函数或方法可以检索下面的XML数据?谢谢!

$xmldoc = simplexml_load_file("products.xml");
$query = $xmldoc->xpath('/products/product[contains(description, "brand new")]');  
foreach($query as $Products) {
echo $Products->name . " ";
echo $Products->description . "<br>";
}

<products>

<product type="Electronics">
<name>Desktop</name>
<price>499.99</price>
<store>Best Buy</store>
<description>low price, 17 inch screen, brand new </description>
</product>
</products>

1 个答案:

答案 0 :(得分:0)

一种方法是使用

/products/product[contains(description, "brand new") and contains(description, "low price")]

当然,这是非常具体的例子。

你可以通过分割你的字符串来概括一点。在Xpath 1.0中:

  

/ products / product [contains(description,“brand”)and contains(description,“new”)and contains(description,“low”)and contains(description,“price”)]

在Xpath 2.0中:

  

/ products / product [contains(description,tokenize(“low price new new”,“\ s +”))]