使用 XPath 获取 div 值 (content/text)
Getting div value (content/text) using XPath
我有下一个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_ITEMs,它按预期工作,但似乎获取 listing-date
div (REQUIRED_ITEM_6) 中包含的文本的代码是错误的。
此外,这是解析我的 html 和收集数据的最佳方法吗?还是有更好的方法?
这里是获取REQUIRED_ITEM_6
的xPath
//li[@class='listing-post']//div[@class='listing-date']/text()
那会快一点(但第一个版本可能更安全,因为它较少依赖 XML 结构)。
//li[@class='listing-post']/div/div[@class='listing-date']/text()
所以您的代码必须看起来像这样(但您可能需要用您的 php 稍微调整一下,不确定您为什么使用项目 (4))。
$REQUIRED_ITEM_6 = $xpath->query(".//div[@class='listing-date']/text()", $link)->item(0)->textContent;
我有下一个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_ITEMs,它按预期工作,但似乎获取 listing-date
div (REQUIRED_ITEM_6) 中包含的文本的代码是错误的。
此外,这是解析我的 html 和收集数据的最佳方法吗?还是有更好的方法?
这里是获取REQUIRED_ITEM_6
的xPath//li[@class='listing-post']//div[@class='listing-date']/text()
那会快一点(但第一个版本可能更安全,因为它较少依赖 XML 结构)。
//li[@class='listing-post']/div/div[@class='listing-date']/text()
所以您的代码必须看起来像这样(但您可能需要用您的 php 稍微调整一下,不确定您为什么使用项目 (4))。
$REQUIRED_ITEM_6 = $xpath->query(".//div[@class='listing-date']/text()", $link)->item(0)->textContent;