使用xpath获取父节点中的所有文本


Get all text within parent node with xpath

我刚开始在PHP中的一个项目中使用Xpath。我必须从网站上获得每种产品的单独价格。每个产品的价格信息都有以下格式:

<div class="priceStockDetail">
    <dl>
        <dt>Across any 6</dt>
        <dd><span class='price '><span class='currency'>$</span>20<span class=cents>.90</span></span></dd>
        <dt>Each</dt>
        <dd><span class='price '><span class='currency'>$</span>22<span class=cents>.00</span></span></dd>
    </dl>
</div>

我希望只将<dt>Each</dt>之后的文本作为一个Xpath表达式(上面的示例为"$22.00")。

任何帮助都将不胜感激。

您可以针对每个片段元素并进行连接,也可以只针对父元素并获取nodeValue。示例:

$dom = new DOMDocument();
$dom->loadHTML($html_string);
$xpath = new DOMXpath($dom);
$data = array();
$products = $xpath->query('//dt');
if($products->length > 0) {
    foreach($products as $product) {
        $product_name = $product->nodeValue;
        // either get individually
        // $currency = $xpath->evaluate('string(./following-sibling::dd[1]/span/span[@class="currency"])', $product);
        // $price = $xpath->evaluate('string(./following-sibling::dd[1]/span/span[@class="currency"]/following-sibling::text())', $product);
        // $cents = $xpath->evaluate('string(./following-sibling::dd[1]/span/span[@class="cents"])', $product);
        // $product_price = $currency.$price.$cents;
        // or
        $product_price = $xpath->evaluate('string(./following-sibling::dd[1]/span)', $product);

        $data[] = array(
            'product_name' => $product_name,
            'product_price' => $product_price,
        );
    }
}
echo '<pre>';
print_r($data);

样本输出