Php XPath-查询不完全匹配的文本字符串
我使用XPath的contain函数来查询下面XML文件的description元素。如下面的xpath表达式代码所示,使用全新的查询时,它检索XML数据。但是,如果使用低价全新的,则不会检索到任何内容。显而易见的结论是,contain函数将只检索精确匹配的文本字符串,并且如果单词像下面的description元素中那样彼此分离,那么它将不起作用 XPath是否有一个函数或方法,可以在查询带有字符串low price brand new的description元素时检索下面的XML数据?谢谢Php XPath-查询不完全匹配的文本字符串,php,xml,xpath,Php,Xml,Xpath,我使用XPath的contain函数来查询下面XML文件的description元素。如下面的xpath表达式代码所示,使用全新的查询时,它检索XML数据。但是,如果使用低价全新的,则不会检索到任何内容。显而易见的结论是,contain函数将只检索精确匹配的文本字符串,并且如果单词像下面的description元素中那样彼此分离,那么它将不起作用 XPath是否有一个函数或方法,可以在查询带有字符串low price brand new的description元素时检索下面的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>
一种方法是使用
/products/product[contains(description, "brand new") and contains(description, "low price")]
当然,这是非常具体的例子
您可以通过拆分字符串来进行一点泛化。在Xpath 1.0中:
/产品/产品[包含说明、品牌和包含说明、新增和包含说明、低价和包含说明、价格]
在Xpath 2.0中:
/产品/产品[包含说明,标记低价格全新,\s+]
不,不是XPath 1.0函数,但是您当然可以使用2包含查询。此外,您可能希望使用规范化空白。