Поиск части с помощью простого парсера html dom по двум или более атрибутам на один элемент

Я хотел бы сказать, что я знаю, что многие думают, что парсер Simple HTML DOM - действительно плохой выбор для парсера 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] или т. д.?


person Eugene    schedule 09.04.2011    source источник


Ответы (5)


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

person Eugene    schedule 03.05.2011

вероятно, через восемь лет они придумали обновленную версию.

Чтобы использовать простой парсер HTML DOM с более чем одним атрибутом,

foreach($dom->find('tag[attr1][attr2]') as $stuff){
    echo $stuff;
}
person Creamy Oreo    schedule 13.11.2019

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

person Dmytro Zavalkin    schedule 09.04.2011
comment
Пробовал этот. Неа. Если я все сделал правильно, то не работает. - person Eugene; 15.04.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 возвращает массив узлов, а не новый объект дерева, что делает невозможной цепочку.

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

person Dormouse    schedule 05.05.2011

person    schedule
comment
Да, это хороший пример функциональности DOMDOcument, но, как говорится в теме, мне нужен специальный синтаксический анализатор Simple HTML DOM. Если это невозможно на 100%, то мне нужно, чтобы кто-то со стопроцентным знанием сказал, что это так. - person Eugene; 30.04.2011
comment
вы не можете разобрать его на 100%. Это зависит от типа HTML, я имею в виду, что он показывает различия между HTML и HTML. Также я сделал ошибку в примере, см. Проверьте этот $xpath-›query( //*/div[@class='name'][@id='someId'][class='SomeClassName'] - person Mustafa; 30.04.2011
comment
И еще вы говорите о DOMDocument. Этот вопрос явно касается простого парсера HTML DOM -› simplehtmldom.sourceforge.net - person Eugene; 30.04.2011