извлекать данные из элементов с одинаковым идентификатором в HTML-документе - PullRequest
0 голосов
/ 17 августа 2010

Я использую класс PHP DOMDocument для анализа HTML-файла и использую код

$dom =new DOMDocument();
@$dom->loadHTMLFile($file_path);
$dom->getElementById("my_id")

для извлечения данных элемента с идентификатором «my_id», но проблема в документе HTMLсодержит несколько элементов с одинаковым идентификатором, и я хочу данные во всех этих элементах .. HTML-код,

<div id="my_id">
     phone number 123
</div>
<div id="my_id">
     address somewhere 
</div>
 <div id="my_id">
     date of birth
</div>

я знаю, что идентификатор уникален, но здесь дело обстоит именно так ...case getElementById () вернет массив ..

Ответы [ 4 ]

1 голос
/ 17 августа 2010

Нет, если что-нибудь getElementById() вернет DOMElement.В случае нескольких возвращенных узлов, результаты будут DOMNodeList, но это здесь не применимо.

Кроме того, DOM не будет распознавать ваши идентификаторы, пока вы не подтвердитеДокумент против DTD или файла схемы, который определяет атрибут id как фактический атрибут XML ID, который отличается от других атрибутов.Вот почему DOMAttr имеет метод isId, а XML требует, чтобы идентификаторы имели уникальное значение.Как указал VolkerK в комментариях, при использовании loadHTMLFile эта проверка будет выполняться автоматически.

См. Мой ответ на Упрощение синтаксического анализа PHP DOM XML - как? для более подробной информации.

0 голосов
/ 17 августа 2010

Если нет абсолютно никакого способа, которым вы (или кто-то еще) можете исправить входящие данные (что, как было отмечено, является единственно правильным решением). Это может быть случай, когда SimpleHTMLDOM более мягкий разбор оказывается плодотворным.

Я не пробовал, как с этим справиться, но я мог бы представить, что

foreach ($html->find('div[id=my_id]') as $element)
 echo "Found ".$element->id."<br>";

работает по мере необходимости.

0 голосов
/ 17 августа 2010

Может быть, запрос XPath для атрибута ID может помочь.

0 голосов
/ 17 августа 2010

Неа.Вы обнаружите, что значение getElementById не определено, хотя вы сможете узнать, что элемент является DIV

...