2017-07-27 71 views
0

我有這個網頁我想解析使用SimpleXMLElement尋找#href「#3」,然後獲取下面的span-> a的內容,這將是「吉姆」:PHP - 使用SimpleXMLElement解析網頁

<?xml version='1.0'?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head>..</head> 
    <title>this is the title<title> 
    <body> 
     <script>...</script> 
     <div id="div1"> 
     something 
     </div> 
     <div id="content"> 
     <div id="src"> 
      <pre> 
       <a name="1" href="#1">1</a> 
       <span class="myclass"> 
        <a href="somelink123">john</a> 
       </span> 
       <a name="1" href="#2">2</a> 
       <span class="myclass"> 
        <a href="somelink2342">dev</a> 
       </span> 
       <a name="1" href="#3">3</a> 
       <span class="myclass"> 
        <a href="somelink33452">jim</a> 
       </span> 
       .... 
       .... 
      </pre> 
     </div> 
     </div> 
    </body> 
</html> 

我使用的SimpleXMLElement去「前」,但子女如何根據屬性,然後兄弟姐妹我會訪問元素?

謝謝!

+0

如果你已經發布了你的代碼,它會很有用 - 顯示你的用法以及如何修改代碼而不是重新寫它。 –

回答

1

使用PHP DomDocument

此代碼將尋找a#href "#3",並在它旁邊找到跨度。

$dom = new DOMDocument(); 
libxml_use_internal_errors(true);//Disable libxml errors 
$dom->loadHTMLFile("test.html");//saved your html as test.html 

$xpath = new DOMXPath($dom); 

$spanVal = $xpath->query("//a[@href='#3']/following-sibling::*[1]"); 

foreach($spanVal as $span) 
{ 
    echo $span->nodeValue; 
} 

輸出:

jim 
+1

對於單個匹配,您也可以直接獲取字符串:'echo $ xpath-> evaluate(string(「// a [@href ='#3']/following-sibling :: * [1])」) ;' – ThW

+0

@ThW好點.. – NID

+1

謝謝,這似乎工作! – user2727704

-1

嘗試使用simple_html_dom_parser。使用+非常容易,提供瞭如此多的選擇。這是一個簡單的DOM版本。這裏的鏈接 -

simple_html_dom_parser

我希望這將是有益的!

+0

這是更多的評論,或者用代碼發佈完整答案,或者等到你有足夠的代表評論。 –

0

使用XPath和SimpleXML你可以使用下面的...

<?php 
    error_reporting (E_ALL); 
    ini_set ('display_errors', 1); 

    $xml = simplexml_load_file("t1.xml"); 

    $xml->registerXPathNamespace("d", "http://www.w3.org/1999/xhtml"); 
    $elements = $xml->xpath("//d:a[@href='#3']/following-sibling::d:span/d:a"); 
    foreach ($elements as $element) { 
     echo $element; 
    } 

我將文件保存爲t1.xml(也是固定的節目的結束標記 - 這樣被騙了一下,使之簡單)。

這裏最主要的是有一個默認的命名空間,如果你不包含registerXPathNamespace(在這種情況下使用'd'作爲虛擬前綴),那麼就不能找到這些元素。你可以看到我把d:放在每個元素名稱的開始位置(即d:span