0

在另一个问题的帮助下,我使用 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>

我需要搜索来查找两个单独的词,例如如果我在寻找“阿迪达斯鞋”我希望查询返回 TRUE,但如果它找到反向术语“阿迪达斯鞋”或小写“鞋”,我也希望它返回 TRUE adidas”而不是确切的字符串。

4

1 回答 1

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 响应。这里有两种不同的方法,一种是 using contains(),一种是使用 just translate()。如果您想要精确匹配“阿迪达斯鞋”和“阿迪达斯鞋”,请使用后一种解决方案。如果您只是在寻找“阿迪达斯”,请使用第一个解决方案,如果您想要 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 更改为该词。

于 2013-01-02T13:24:16.397 回答