Пытаюсь прочитать XML-узлы с помощью PHP DOM

#php #xml #dom

#php #xml #dom

Вопрос:

Я пытаюсь прочитать соответствующие узлы в следующей XML-строке, чтобы, наконец, отобразить:

ошибка: 0

Сообщение из каталога: Пинги пересылаются 11 сервисам!

 <?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
      <value>
        <struct>
  <member><name>flerror</name><value><boolean>0</boolean></value></member>
  <member><name>message</name><value><string>Pings being forwarded to 11 services!</string></value></member>
</struct>
      </value>
    </param>
  </params>
</methodResponse>
  

Я попытался использовать:

 $doc = new DOMDocument();
$doc->loadXML($xmlString);
$value = $doc->getElementsByTagName("value");
$value = $value->item(0)->nodeValue;
  

и получено:

 <br>flerror0<br>
  messagePings being forwarded to 11 services!
  

Затем я могу использовать функции синтаксического анализа строк для выделения строк, но мне нужно более чистое решение.

Любые предлагаемые улучшения, которые, возможно, позволят избежать дополнительного разбора строк?

Спасибо!

Комментарии:

1. Ваш код работает для меня: codepad.org/aximvvBG . nodeValue выдаст вам объединенные значения DOMTextNode элемента, для которого он извлекается. Если вам нужны отдельные значения узла, извлеките отдельные узлы и отформатируйте вывод с помощью sprintf

Ответ №1:

У меня не так много опыта с DOMDocument . Но, похоже, ваш xml маленький и простой, я бы посоветовал использовать простой xml. Вот что я написал

 <?php
$xmlString = "<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
      <value>
        <struct>
  <member><name>flerror</name><value><boolean>0</boolean></value></member>
  <member><name>message</name><value><string>Pings being forwarded to 11 services!</string></value></member>
</struct>
      </value>
    </param>
  </params>
</methodResponse>
";

$xml = simplexml_load_string($xmlString);
echo '<pre>';
print_r($xml->params->param->value);
echo '</pre>';

?>
  

И получил

 SimpleXMLElement Object
(
    [struct] => SimpleXMLElement Object
        (
            [member] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [name] => flerror
                            [value] => SimpleXMLElement Object
                                (
                                    [boolean] => 0
                                )

                        )

                    [1] => SimpleXMLElement Object
                        (
                            [name] => message
                            [value] => SimpleXMLElement Object
                                (
                                    [string] => Pings being forwarded to 11 services!
                                )

                        )

                )

        )

)
  

Я думаю, теперь будет намного проще получить доступ к каждому узлу.

Ответ №2:

У меня была аналогичная проблема с DOMDocument, и, похоже, он не может предоставить содержимое с узла с именем «param»…

Попробуйте изменить имя на «параметр», это сработает

Реальная история