Как получить все ссылки из документа HTML, используя DOMXPath - PullRequest
0 голосов
/ 01 сентября 2009

У меня есть этот код

  <?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 Я нашел это здесь

то, что я хочу, является более сложным:)

Я хочу получить все теги привязки + всех детей и родителей и их атрибуты для каждого тега привязки

например, результат, который я хочу получить при получении первого тега привязки, выглядит примерно так

         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 ]

1 голос
/ 01 сентября 2009

XPath должны сделать так, чтобы вам не нужно было повторяться. Чтобы получить важные атрибуты li, используйте XPath вроде:

//li/@class

или

//li/@id

, который должен дать вам повторяемый объект, который вы можете использовать.

Вот еще немного информации о XPaths

0 голосов
/ 03 сентября 2009

Возможно, вам следует написать простую таблицу стилей XSLT. Сопоставьте тег <a>, и тогда ancestor :: * выдаст все родительские узлы, child :: * даст вам все дочерние элементы - вы получите гораздо больше возможностей, используя простой синтаксис XPath через XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...