Php Xpath - 如何在子节点中获取两个信息
问题描述:
如何在xpath中获取以下信息?Php Xpath - 如何在子节点中获取两个信息
文本01 - link_1.com
文本02 - link_2.com
$page = '
<div class="news">
<div class="content">
<div>
<span class="title">Text 01</span>
<span class="link">link_1.com</span>
</div>
</div>
<div class="content">
<div>
<span class="title">Text 02</span>
<span class="link">link_2.com</span>
</div>
</div>
</div>';
@$this->dom->loadHTML($page);
$xpath = new DOMXPath($this->dom);
// perform step #1
$childElements = $xpath->query("//*[@class='content']");
$lista = '';
foreach ($childElements as $child) {
// perform step #2
$textChildren = $xpath->query("//*[@class='title']", $child);
foreach ($textChildren as $n) {
echo $n->nodeValue.'<br>';
}
$linkChildren = $xpath->query("//*[@class='link']", $child);
foreach ($linkChildren as $n) {
echo $n->nodeValue.'<br>';
}
}
我的结果返回
文本01
文本02
link_1.com
link_2.com
文本01
文本02
link_1.com
link_2.com
答
在第二和第三的XPath descendant::
更换//
,因为//
告诉XPath来在xml中搜索此元素evrywhere而不是在特定节点中(如您所需),并且$ child不是单独的XML。 descendat::
意味着任何子节点
@$this->dom->loadHTML($page);
$xpath = new DOMXPath($this->dom);
// perform step #1
$childElements = $xpath->query("//*[@class='content']");
$lista = '';
foreach ($childElements as $child) {
// perform step #2
$textChildren = $xpath->query("descendant::*[@class='title']", $child);
foreach ($textChildren as $n) {
echo $n->nodeValue.'<br>';
}
$linkChildren = $xpath->query("descendant::*[@class='link']", $child);
foreach ($linkChildren as $n) {
echo $n->nodeValue.'<br>';
}
}
谢谢。有效 – adrianogf 2012-07-13 14:50:25