php dom получает значение узла в гнезде

0

У меня есть дерево xml:

<root>
    <a>This is a</a>
    <b>
        <b-1>Im a child of b-1</b-1>
        <b-1>Im a child of b-1</b-1>
    </b>
</root>

Я устал

$str = $dom->getElementsByTagName("b")->item(1);
$str->nodeValue;

Это выводит значение nodevalue как целую строку, как я могу получить значение nodevalue отдельно?

  • 0
    Msgstr "Это выведет значение узла как целую строку". Можете ли вы уточнить, что вы подразумеваете под этим?
  • 0
    @mikeO. Я изменяю тег внутри ба бита. Из вышеприведенного вывода значение_узла будет содержать: «Я - дитя b-1, Я - дитя b-1». Если я нацеливаюсь на тег b-1, тогда я смогу получить значение узла одно за другим из цикла foreach.
Теги:
dom

1 ответ

0
Лучший ответ

Вы должны пройти каждый <b> и их дочерние узлы следующим образом:

foreach ($dom->getElementsByTagName("b") as $b) {   // 1
    foreach ($b->childNodes as $node) {             // 2
        if ($node->nodeType === XML_ELEMENT_NODE) { // 3
            echo $node->nodeValue, PHP_EOL;         // 4
        }
    }
}
  1. Перемещение элементов <b>
  2. Пройдите дочерние узлы каждого элемента <b>
  3. Проверьте, что текущий узел является element DOM, а не text узлом
  4. Распечатайте дочернее значение или сделайте все, что вам нужно.

ВЫВОД:

Im a child of b-1
Im a child of b-1
  • 0
    Спасибо вам большое, вы гений! Можно ли пропустить второй цикл, так как он будет немного грязным?
  • 1
    Если ваш документ всегда содержит один элемент <b> , вы можете сделать это в одном цикле, например: foreach ($dom->getElementsByTagName("b")[0]->childNodes as $node) {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню