0

別の質問の助けを借りて、xpath を使用して Web サイトからクエリを返しましたが、特定のタイトルを検索する必要があります。

これまでの私のコードは次のとおりです。

<?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" を探している場合のように、検索で 2 つの単語を検索する必要があります。クエリで TRUE を返したいのですが、逆の単語 "Shoes Adidas" または小文字の "shoes" が見つかった場合にも 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応答が必要な場合。ここには2つの異なる方法があります。1つはを使用する方法contains()ともう1つはを使用する方法ですtranslate()。「adidasshoes」と「shoesadidas」を完全に一致させたい場合は、後者のソリューションを使用してください。'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をその単語に変更します。

于 2013-01-02T13:24:16.397 に答える