2010-11-19 2 views
0

Я думаю, что это получает первый элемент с именем <gallery>PHP getElementsByTagName с определенным атрибутом

$gallery = $objDOM->getElementsByTagName('gallery')->item(0); 

Я пытаюсь получить <gallery name="Third">

Я думаю, что мне нужно что-то эквивалентно:

$gallery = $objDOM->getElementsByTagName('gallery[@name="Third"]')->item; 

Спасибо, Andy

ответ

5

Это только pos с DOMXPath, например.

$xp = new DOMXPath($yourDOMDocument); 
$nodes = $xp->query('//gallery[@name="Third"]'); 

или итерацию по списку узлов после вызова getElementsByTagName с

foreach ($objDOM->getElementsByTagName('gallery') as $gallery) { 
    if($gallery->getAttribute('name') === 'Third') { 
     // do something 
    } 
} 
+0

Использование * // gallery * отличается от * getElementsByTagName() *, вызываемого в документе, потому что оно просто соответствует «галерее» -Elements на корневом уровне, а не в каждой «галерее» -Element. – KingCrunch

+0

@Sebastian не соответствует действительности. '// gallery' соответствует любому элементу галереи в любом месте документа (или ниже контекстного узла). Это * равно * эквивалентно использованию 'getElementsByTagName()' – Gordon

+0

Да, извините, вы правы. – KingCrunch

1

Как следует из названия getElementsByTagName() принимает только имена тегов. Попробуйте XPath вместо этого

Не проверял его, поэтому могут возникнуть ошибки, опечатки или что-то еще.

+0

Конечно, не знаю, почему я так не делал этого, в первую очередь! Приветствия. – Andy

Смежные вопросы