尝试使用PHP DOM读取XML节点

时间:2011-05-22 08:49:36

标签: php xml dom

我正在尝试读取以下XML字符串中的相关节点,最后显示:

  

flerror:0

     

来自目录的消息: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!

然后我可以使用字符串解析函数来分离字符串,但我需要一个更清晰的解决方案。

任何可能避免额外字符串解析的建议改进?

谢谢!

2 个答案:

答案 0 :(得分:2)

我对DOMDocument的经验不多。但看起来你的xml小而简单,我建议使用simple 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!
                                )

                        )

                )

        )

)

我认为现在访问每个节点会容易得多。

答案 1 :(得分:0)

我在DOMDocument中遇到了类似的问题,似乎它无法从名为“param”的节点提供内容......

尝试将名称更改为“参数”,它将起作用

真实的故事