Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php XPath-查询不完全匹配的文本字符串_Php_Xml_Xpath - Fatal编程技术网

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

Php XPath-查询不完全匹配的文本字符串,php,xml,xpath,Php,Xml,Xpath,我使用XPath的contain函数来查询下面XML文件的description元素。如下面的xpath表达式代码所示,使用全新的查询时,它检索XML数据。但是,如果使用低价全新的,则不会检索到任何内容。显而易见的结论是,contain函数将只检索精确匹配的文本字符串,并且如果单词像下面的description元素中那样彼此分离,那么它将不起作用 XPath是否有一个函数或方法,可以在查询带有字符串low price brand new的description元素时检索下面的XML数据?谢谢 $

我使用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包含查询。此外,您可能希望使用规范化空白。