Как я могу проанализировать XML, чтобы получить несколько текстовых блоков с помощью SimpleXML?

Я хочу проанализировать XML, который выглядит так:

<node>
  This is
  <child>
    blah
  </child>
  some
  <child>
    foo
  </child>
  text
</node>

Как мне получить доступ к дочерним текстовым узлам в Simple XML?

Могу ли я получить к ним доступ в правильном порядке текста и дочерних элементов?

Нужен ли мне для этого какой-нибудь другой пакет?


person Jordie    schedule 19.03.2009    source источник


Ответы (2)


Я настоятельно рекомендую перейти на функции DOM через SimpleXML. Некоторое время назад у меня был такой ответ, которого не было ' t очень популярен, но я все еще поддерживаю его. Функции DOM настолько мощны: дополнительная многословность того стоит.

$doc = new DOMDocument();
$doc->loadXML($xmlString);

foreach ($doc->documentElement->childNodes as $node) {
    if ($node->nodeType === XML_TEXT_NODE) {
        echo $node->nodeValue . "\n";
    }
}
person nickf    schedule 19.03.2009
comment
Вы получили мое голосование по этому вопросу. Я чешу затылок. Люди не знают, что это правильный XML? Какого черта? - person Jordie; 20.03.2009

person    schedule
comment
@Jayrox, возвращает узлы ‹child›, а не запрошенные узлы This is, some и text. - person strager; 20.03.2009
comment
Да, мне нужны те текстовые узлы в правильном порядке с дочерними элементами. Дочерние элементы просты: foreach ($ xml- ›children () as $ child) {...} - person Jordie; 20.03.2009