如何使用DOMXPath从HTML文档中检索所有链接

时间:2009-09-01 16:48:01

标签: php xml dom xpath

我有这段代码

  <?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文档中检索所有锚标记 我找到了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”这对我来说非常困难:(但对于你们中的一些人来说可能很容易

你有任何问题吗?

你知道如何解决这个问题吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

XPath应该这样做,所以你不需要迭代。要提取li的重要属性,请使用XPath:

//li/@class

//li/@id

它应该为您提供一个可以使用的可迭代对象。

以下是有关XPaths

的更多信息

答案 1 :(得分:0)

也许你应该编写一个简单的XSLT样式表。匹配<a>标签,然后祖先:: *会给所有父节点,child :: *会给你所有的孩子 - 你可以通过XSLT使用简单的XPath语法获得更多的力量。