Поиск части с простым html dom-парсером по двум или более атрибутам на один элемент - PullRequest
2 голосов
/ 09 апреля 2011

Я хотел бы сказать, что я знаю, что многие думают, что Simple HTML DOM parser - действительно плохой выбор для HTML-парсера. Тем не менее, мне нужно использовать его в данный момент.

Я прочитал несколько статей, где было описано, как искать по двум или более атрибутам на один элемент. Они предложили что-то подобное и одну возможность с фильтрацией массива

foreach ( tag[attr1=value] as tag1 )
{
   foreach ( tag[attr2=value] as tag2 )
   {
      // print tag2[attr1=value,attr2=value]
   }
}

У меня вопрос о собственной возможности найти деталь по двум признакам. Я не нашел его в руководстве, но не все всегда в руководстве.

Кто-нибудь знает, есть ли такой или похожий tag2[attr1=value,attr2=value] или tag2[attr1=value attr2=value] или т. Д.? * 10101 *

Ответы [ 4 ]

1 голос
/ 30 апреля 2011
$doc      = new DOMDocument();
@$doc->loadHTML( $html );
$xpath    = new DOMXpath( $doc );
$elements = $xpath->query( "//*/div[@class='name'][@id='someId']" );  

if ( $elements->length > 0 )
{
    foreach ( $elements as $index => $node )
    {
        //get node detail here
    }
}
1 голос
/ 03 мая 2011

Как я вижу, на данный момент нет способа сделать это.Он должен быть отредактирован автором этого сценария или другим разработчиком, желающим продолжить разработку этого проекта.Не знаю, разрешает ли это лицензия или нет.

0 голосов
/ 05 мая 2011

Насколько я могу судить, просмотрев simple_html_dom, нет другого пути, кроме вложенного цикла foreach, для достижения нужной вам функциональности.Нет встроенной поддержки tag[attr=val][attr2=val]

Кроме того, каждый селектор действует просто для добавления к возвращаемым узлам, а не для того, чтобы убрать из него что-то вроде tag.class[attr=val] or tag#id[attr=val], которое я пробовал как обходной путь, который подражалнекоторые аналогичные функции.

Также я попробовал $html->find("div[attr=val]")->find("div[attr2=val2]"), но это также не удалось, поскольку Simple HTML DOM возвращает массив узлов, а не новый объект дерева, что делает невозможным сцепление.

Лучший способидти - это то, как вы разместили свой вопрос.

0 голосов
/ 09 апреля 2011

Никогда ранее не использовал Simple HTML DOM parser. Но на его домашней странице написано, что он работает в jQuery, поэтому попробуйте tag[attr1=value][attr2=value] ( jQuery: выбор нескольких атрибутов )

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