私はいくつかのHTMLのスクレープを行い、この1つのクエリで壁に当たっています。私は、次のHTMLページの構造からの値のセットを返すようにしようとしています:PHPのXPath部分文字列 - 最初の結果のみを返した後
<div id="product-grid">
<ul>
<li><div class="price">Cash Price: $20.00</div></li>
<li><div class="price">Cash Price: $30.00</div></li>
<li><div class="price">Cash Price: $40.00</div></li>
</ul>
</div>
私はリストで返さ"$20.00"
価格を取得しようとしています。次のXPathを使用する場合:
id('product-grid')//p[@class="price"]
すべての「現金価格:$ 40.00」の結果リストが表示されます。次のクエリを試してみてください:
substring-after(id('product-grid')//p[@class="price"] , "Price: ")
私は正しい出力を得ていますが、最初の結果しか得られません。誰も私はどのようにすべての結果を得ることができますか?
XPath
の場合、PHP5.3.3
をlibxml 2.7.8
と実行しています。私はxpathを次のように呼んでいます:
$xpath = new DOMXPath($html);
$resultset= $xpath->query($query);
私はこれがなぜ起こっているのかを調べようと怒っています!助けてください!
残念ながら、これはphp/xpath構文エラーをスローします。 – Michael
エラー出力は何ですか? – Tom
軸上の関数を使用するのはXPath 2.0の機能です。おそらく、標準のPHP環境では利用できません。 'id( 'product-grid')// p [@ class =" price "] [substring-after(。、 'Price:')]述語フィルタに適用できるはずです。また、サンプルXMLは 'div'要素を' @ class'と表示していますが、XPath(そしてあなたの答え)の例は 'p'が' @ class'を持つことを期待しています。 –