Попытка чтения узлов XML с использованием PHP DOM - PullRequest
2 голосов
/ 22 мая 2011

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

flerror: 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!

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

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

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

<code><?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 '
'; ?>

И получил

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!
                                )

                        )

                )

        )

)

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

0 голосов
/ 08 октября 2011

У меня была похожая проблема с DOMDocument, и кажется, что он не может выдавать контент с узла с именем "param" ...

Попробуйте изменить имя на "параметр", он будет работать

Правдивая история

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...