使用XPath获取div值(内容/文本)

时间:2015-10-22 19:30:36

标签: php xpath domxpath

我有下一个html结构:

<li id="REQUIRED_ITEM_1" class="listing-post">

    <a class="listing-thumb" href="blah" title="blah" data-palette-listing-image="">

        <img src="REQUIRED_ITEM_2" width="75" height="75" alt="blah"> </a>

    <div class="listing-detail ">

        <div class="listing-title">

            <div class="listing-icon hidden"></div>

              <a href="REQUIRED_ITEM_3" class="title" title="REQUIRED_ITEM_4">blah</a>

              <div class="listing-maker">

                <span class="name wrap"><a href="REQUIRED_ITEM_5">blah</a></span>

              </div>

        </div>

        <div class="listing-date">
            REQUIRED_ITEM_6
        </div>

        <div class="listing-price">
            Sold
        </div>

    </div>
    </li>

在同一页面上有几十个这些<li>,所有这些都有不同的ID和内容。我需要的内容标记为REQUIRED_ITEM_1 - REQUIRED_ITEM_6。

我在Xpath的帮助下从这些<li>收集数据。

以下是我使用的代码:

    foreach($xpath->query("//li[@class='listing-post']") as $link) {

    $REQUIRED_ITEM_1 = $link->getAttribute('id');
    $REQUIRED_ITEM_2 = $xpath->query(".//img", $link)->item(0)->getAttribute('src');
    $REQUIRED_ITEM_3 = $xpath->query(".//a", $link)->item(1)->getAttribute('href');
    $REQUIRED_ITEM_4 = $xpath->query(".//a", $link)->item(1)->getAttribute('title');
    $REQUIRED_ITEM_5 = $xpath->query(".//a", $link)->item(2)->getAttribute('href');

    $REQUIRED_ITEM_6 = $xpath->query("./div/text", $link)->item(4);
}

它适用于前5个REQUIRED_ITEM,但似乎获取listing-date div(REQUIRED_ITEM_6)中包含的文本的代码是错误的。

此外,这是解析我的HTML和收集数据的最佳方法,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

以下是获取 REQUIRED_ITEM_6

的xPath
//li[@class='listing-post']/div/div[@class='listing-date']/text()

这会更快一些(但第一版可能更安全,因为它更少依赖于XML结构)。

$REQUIRED_ITEM_6 = $xpath->query(".//div[@class='listing-date']/text()", $link)->item(0)->textContent;

所以你的代码必须看起来像这样(但你可能需要用你的php稍微调整一下,不知道为什么你用了item(4))。

{{1}}