【问题标题】:How to convert empty XML node into empty string instead of SimpleXMLElement如何将空 XML 节点转换为空字符串而不是 SimpleXMLElement
【发布时间】:2012-07-30 21:32:37
【问题描述】:

我有一个有时有空节点的 XML 字符串。当使用 simplexml_load_string 解析它时,解析器将任何空节点(例如 <node></node>)解释为空的 SimpleXMLElement。我实际上更希望这些作为空字符串出现,或者完全省略。

我已经尝试使用如下所示的 LIBXML_NOBLANKS,但它似乎没有任何效果。这是一些演示这种情况的代码。节点“p2”为空:

$xml = "<xml><p1>1</p1><p2></p2><p3>3</p3></xml>";

$obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOBLANKS);

header("Content-type: text/plain");

echo "STRING\n-----\n" . $xml;
echo "\n\nOBJ\n---\n" . print_r($obj,1);
echo "\n\nJSON\n----\n" . json_encode($obj);

【问题讨论】:

  • 我刚刚做了一些测试,这看起来确实是 XML 模块中的一个错误。
  • 感谢您的回复。我有一个 hack 解决方案,涉及转换为类似于 xpath 解决方案的数组,但我希望 LIBXML_NOBLANKS 或其他一些标志可以处理它而无需枚举。
  • @Jason 你应该已经发布了你的解决方案

标签: php simplexml


【解决方案1】:

这是空节点的工作示例:

    $nodes = $rootNode->xpath("//*[text()='']");
    foreach ($nodes as $node) {
        unset($node->{0});
    }

unset($node-&gt;{0}) - 是一种破坏此节点并将其从父节点中删除的技巧。

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 2011-08-28
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多