2013-02-09 104 views
0

我必須從網站收集一些數據。我的數據被封裝爲div s。在每個div中都有一個標題標記。我需要獲取這些標題標記中的文本。如何做這個。 我寫了下面的code.What修改我要申請acheiving任務PHP DOM在另一個元素內遍歷元素

<?php 
$str = ''; 
$page = file_get_contents('http://www.sarkari-naukri.in/'); 
$dom = new DOMDocument(); 
$dom->loadHTML($page); 
$divs = $dom->getElementsByTagName('div'); 
$i = 0; 
$len = $divs->length; 
while($i<$len) { 
    $div = $divs->item($i++); 
    $id = $div->getAttribute('id'); 
    if(strpos($id,'post-') !== false) { 
      // i need to get text inside title tag inside this div 
     $title ='';//title should be stored here 
     $str = $str.$title; 
    } 
} 
echo $str; 

樣本HTML

<body> 
    <div id = 'post-1'> 
     <title>title 1</title> 
    </div> 
    <div id = 'post-2'> 
     <title>title 2</title> 
    </div> 
    <div id = 'post-3'> 
     <title>title 3</title> 
    </div> 
</body> 
+0

任何xml示例? – j0k 2013-02-09 09:55:48

+0

添加樣本HTML – 2013-02-09 10:00:02

回答

2

以下PHP的DOMDocument代碼:

$id = $div->getAttribute('id'); 
if (strpos($id,'post-') !== false) { 

可以Xpath 1.0Xpath string functionDocs來表示:

//div[contains(@id, 'post-')] 

讀:其具有包含字符串post-一個id屬性的任何div元件。通過Xpath的規則,你可以進一步擴展表達式如selectinig所有那些標題的孩子:

//div[contains(@id, 'post-')]/title 
+0

Thanks..this正是我想要的 – 2013-02-09 10:44:25

+0

還有['starts-with'](http://www.w3.org/TR/xpath/#function-starts-with)也許你是指那個? – hakre 2013-02-09 11:42:41

+0

但它沒有被解析,因爲我的HTML有錯誤,沒有DOM ..該怎麼辦? – 2013-02-10 14:13:18

1

您可以使用XPath查詢檢索標題信息:

$xml = "<body> 
    <div id = 'post-1'> 
     <title>title 1</title> 
    </div> 
    <div id = 'post-2'> 
     <title>title 2</title> 
    </div> 
    <div id = 'post-3'> 
     <title>title 3</title> 
    </div> 
</body>"; 

$str = ''; 

$doc = new DOMDocument; 
$doc->loadHTML($xml); 

$xpath = new DOMXPath($doc); 

$entries = $xpath->query('//body/div/title'); 
foreach ($entries as $entry) { 
    $str .= $entry->nodeValue; 
} 

var_dump($str); 

Live demo

+0

感謝您的真棒答案...我需要選擇div與someAttribute = someValue ...如何做到這一點? – 2013-02-09 10:09:59

+2

@JinuJD:和xpath一樣,請使用搜索。例如。請參閱[XPath:如何通過索引選擇具有某個屬性的節點?](http://stackoverflow.com/questions/5818681/xpath-how-to-select-node-with-some-attribute-by-index) - 你應該在一段時間後適應它。 – hakre 2013-02-09 10:14:51