Я пытаюсь прочитать соответствующие узлы в следующей строке XML, чтобы в итоге отобразить:
flerror: 0
- Как обнаружить и удалить ненужные атрибуты xmlns: <something> в PHP DOM?
- Как я могу разобрать XML для получения нескольких текстовых блоков с помощью SimpleXML?
- Как извлечь значения из xml-файла и выполнить математические операции?
- PHP-анализ XML
- Создайте заголовок WS-Security с помощью SimpleXML?
- Анализ XML-данных с использованием php для размещения в базе данных mysql
Сообщение из каталога: Pings пересылаются в 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!
Затем я могу использовать функции синтаксического анализа для выделения строк, но мне нужно более чистое решение.
Любые предлагаемые улучшения, которые могут избежать дополнительного синтаксического анализа строк?
Благодаря!
У меня мало опыта работы с 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! ) ) ) ) )
Я думаю, теперь будет намного легче получить доступ к каждому узлу.
У меня была аналогичная проблема с DOMDocument, и кажется, что он не может передать контент из узла с именем «param» …
Попробуйте изменить имя на «параметр», оно будет работать
Правдивая история