【问题标题】:Trying to read XML nodes using PHP DOM尝试使用 PHP DOM 读取 XML 节点
【发布时间】:2011-05-22 08:49:36
【问题描述】:

我正在尝试读取以下 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!

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

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

谢谢!

【问题讨论】:

  • 您的代码适用于我:codepad.org/aximvvBGnodeValue 将为您提供要获取的元素的组合 DOMTextNode 值。如果您想要单独的 nodeValues,请获取单独的节点并使用 sprintf 格式化输出

标签: php xml dom


【解决方案1】:

我对@9​​87654322@ 没有太多经验。但看起来你的 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!
                                )

                        )

                )

        )

)

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

【讨论】:

    【解决方案2】:

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

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

    真实的故事

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多