2014-02-18 1 views
6

У меня есть переменные документы, которые мне нужно изменить на лету. Например, я мог бы иметь документ следующим образом:Как получить определенный тег в DOMDocument в PHP?

<!--?xml version="1.0"?--> 
<item> 
    <tag1></tag1> 
</item> 
<tag2> 
    <item></item> 
    <item></item> 
</tag2> 

Это очень упрощено, но у меня есть теги с одинаковыми именами на разных уровнях. Я хочу получить теги элементов в теге2. Фактические теги в файлах, которые я даю, имеют уникальные идентификаторы, чтобы различать их, а также некоторые другие атрибуты. Мне нужно найти тег, прокомментировать его и сохранить xml. Я смог получить DOMDocument для возврата узла «tag2», но я не уверен, как получить доступ к тегам элемента в этой структуре.

ответ

4

Это своего рода проблема, что DOMDocument класс РНР отлично справляется. Сначала загрузите строку XML с использованием loadHTML() метода, а затем использовать выражение XPath для обхода дерева DOM:

$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 

$item_tags = $xpath->query('//tag2/item'); 
foreach ($item_tags as $tag) { 
    echo $tag->tagName, PHP_EOL; // example 
} 

Online demo

+0

Yup - Я бы вообще пошел с XPath над 'getElementsByTagName()' для чего-то вроде этого. – CD001

+0

Но я предлагаю оценить(), а не query(). Он позволяет выражениям xpath возвращать скаляры. – ThW

1
<?php 
$tag= new DOMDocument(); 
$tag->loadHTML($string); 

foreach ($tag->getElementsByTagName("tag") as $element) 
{ 
    echo $tag->saveXML($element); 
} 
?> 

может быть поможет вам .try это

+0

Проблема с 'getElementsByTagName()' таким образом, что она Безразлично 't действительно заботятся о том, где эти теги появляются - поэтому 'getElementsByTagName (' item ')' будет фактически соответствовать всем '/ item' и'/tag2/item', что не совсем то, что OP было после AIUI. – CD001

0
$DOMNode -> attributes -> getNamedItem('yourAttribute') -> value; 

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

  • Нет связанных вопросов^_^