昨晚的类似问题,我无法编辑源HTML,我试图从网站上解析大量数据来进行产品价格/比较。在大多数情况下,它正在发挥作用,但我现在正试图让它更有效,更快速,更容易阅读我的意大利面条代码。
我有以下测试代码;而我想要做的只是返回内容的属性(例如thisiswhatiwant)如果 productType的nodeValue是Stocked而没有别的。
<div id="productListing">
<div class="productDetail">
<span class="productType">Stocked</span>: <span class="productStock"><span class='productContent' content='thisiswhatiwant'></span></span>
</div>
<div class="productDetail">
<span class="productType">Non-stocked</span>: <span class="productStock"><span class='productContent' content='xyz'></span></span>
</div>
…
<div class="productDetail">
<span class="productType">Non-stocked</span>: <span class="productStock"><span class='productContent' content='123'></span></span>
</div>
</div>
这是我到目前为止的Xpath查询,但是我要么缺少一些重要的东西,要么我脑子里的东西还没有点击装备。
//div[@id="productListing"]/div[@class="productDetail"]/span[@class="productStock"]/preceding-sibling::span[text()="Stocked"]
基本上,我想从上面的测试代码输出的内容是:
<?
echo "Output: " . $dom->getAttribute('content');
?>
Output: thisiswhatiwant
有人有任何想法吗?
答案 0 :(得分:2)
假设$dom
是从给定XML字符串创建的DomDocument对象:
$xpath = new DOMXPath($dom);
$q = '//span[@class="productType" and text()="Stocked"]/ancestor::*[@class="productDetail"]/span[@class="productStock"]/span[@class="productContent"]';
$res = $xpath->query($q);
foreach($res as $node) {
echo $node->getAttribute('content') . PHP_EOL;
}