2017-07-27 78 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