2009-09-01 42 views
0

我有這樣的代碼如何使用DOMXPath

<?PHP 
     $content = '<html> 
     <head> 
     <title></title> 
     </head> 
     <body> 
     <ul> 
      <li style="border:0px" class="list" id="list1111"> 
      <a href="http://www.example.com/" style="font-size:10px" class="mylinks"> 
      <img src="logo.gif" width="235" height="97" alt="logo example" border="0"/> 
      </a> 
      </li> 

      <li style="border:0px" class="list" id="list2222"> 
      <a href="http://www.example.com/2222222" class="mylinks"> 
      second link 
      </a> 
      </li>         
      </ul> 
     </body> 
     </html> '; 

    $doc = new DOMDocument; 
    $doc->loadhtml($content); 
    $xpath = new DOMXPath($doc); 
    $hrefs = $xpath->evaluate("/html/body//a"); 
    for ($i = 0; $i < $hrefs->length; $i++) { 
      $href = $hrefs->item($i); 
      $url = $href->getAttribute('href');     
      echo $url ."<br />"; 
    } 
    ?> 

這個代碼是非常簡單的,它只是檢索所有的錨標籤從HTML文檔檢索HTML文檔中的所有鏈接 我發現它here

我想要更復雜:)

我想檢索所有錨標記+所有孩子和父母及其屬性爲每個錨標記

例如,結果我想取回第一錨標記時,是這樣的

  1-html 
     2-body 
     3-ul 
     4-li(class:list,id:list1111,style:etc....) 
     5-a(href:www.example.com etc..) 
     6-img(width:257 etc) 

我想從頂層到最低水平爲每一個錨標記進行迭代,我希望能夠找回屬性爲每個標籤

這是因爲「DOMXPath」的我很難:(但是它可能會爲一些你

很容易,你有什麼問題嗎?

你知道如何解決這個問題嗎?

在此先感謝

回答

1

XPaths應該使它,所以你不需要迭代。爲了拉li重要屬性使用XPath,如:

//li/@class 

//li/@id 

這應該給你一個迭代的對象就可以使用。

這裏有XPaths

+0

謝謝,我不只是尋找標籤的屬性,我正在尋找的最重要的事情是找到「錨」標籤的父母和孩子。 – ahmed 2009-09-01 18:19:52

+0

你可能會考慮使用'parent ::'和'child ::'軸來進行迭代。 – 2009-09-03 19:49:53

0

一些更多的信息也許你應該寫一個簡單的XSLT樣式表。匹配<a>標籤,然後ancestor :: *會給出所有父節點,child :: *會給你所有的孩子 - 你將通過XSLT使用簡單的XPath語法獲得更多的權力。