在另一个问题的帮助下,我使用xpath从网站返回查询,但我需要它来搜索特定的标题。
到目前为止,这是我的代码:
<?php
libxml_use_internal_errors(true);
$dom = new DomDocument;
$dom->loadHTMLFile("http://www.example.com");
$xpath = new DomXPath($dom);
$nodes = $xpath->query("//span[@class='newprodtext' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'adidas')][1]");
foreach ($nodes as $i => $node) {
echo "Node($i): ", $node->nodeValue, "\n";
}
?>
这是一个示例HTML:
<td colspan="2" align="center">
<a href="product.html" style="text-decoration:none">
<span class="newprodtext">Nike Shoes</span>
</a>
</td>
<td colspan="2" align="center">
<a href="product.html" style="text-decoration:none">
<span class="newprodtext">Nike T-Shirt</span>
</a>
</td>
<td colspan="2" align="center">
<a href="product.html" style="text-decoration:none">
<span class="newprodtext">Adidas Shoes</span>
</a>
</td>
我需要搜索以查找两个单词,例如我是否正在寻找“Adidas Shoes”我希望查询返回TRUE但我还希望它返回TRUE如果它找到反向术语“Shoes Adidas”或小写的“鞋子adidas”而不是精确的字符串。
答案 0 :(得分:1)
只需将xpath更改为以下内容:
//span[@class='newprodtext' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'adidas shoes')]
如果你想要包含你的搜索词的节点,那么
translate(//span[@class='newprodtext']/text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='adidas shoes' or `translate(//span[@class='newprodtext']/text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='shoes adidas'
如果您想要T / F响应。这里有两种不同的方法,一种使用contains()
,另一种只使用translate()
。如果你想要'adidas shoes'和'shoes adidas'的精确匹配,那么请使用后一种解决方案。如果您只是在寻找'adidas',请使用第一个解决方案,如果您想要T / F,请对后者应用相同的更改。
<强>更新强> 如果你想只是第一个带有“adidas”的节点,那么请使用:
//span[@class='newprodtext' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'adidas')][1]
如果你想在T / F中用它包围一个boolean(//span[@class='newprodtext' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'adidas')][1])
。如果您确实需要其他搜索词,请将contains()部分复制并粘贴回来,并将adidas更改为单词。