#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»…
Попробуйте изменить имя на «параметр», это сработает
Реальная история