2012-07-13 84 views
1

如何在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

回答

4

在第二和第三的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>'; 
    } 
} 
+0

谢谢。有效 – adrianogf 2012-07-13 14:50:25