第一次用 PHP 弄 XML,转空<![CDATA[]]>节点为 Array 的时候如何处理?

2014-03-16 20:55:31 +08:00
 coolair
当<![CDATA[]]>里面没内容的时候,用simplexml_load_string将XML转为数组,这个节点转为了一个有一个元素的数组Array ( [0] => ),不是空字符串,也不是空数组。非常费解。
在遍历这个数组操作的时候,往往会遍历进Array ( [0] => )这个数组,如何做到在将<![CDATA[]]>节点转为数组的时候对应为一个空串,而不是一个数组?

谢谢!(各位高手勿笑、勿喷……)
5367 次点击
所在节点    PHP
3 条回复
SoloCompany
2014-03-17 00:44:43 +08:00
simplexml_load_string 返回的不是数组啊,是一个封装了的对象,只是支持数组操作而已
没看出来 CDATA 节点有什么特别啊

~~~~

<?php
$x = simplexml_load_string(<<<XML
<x>
<a> a </a>
<b><![CDATA[ b ]]></b>
<c><![CDATA[]]></c>
</x>
XML
);

print_r($x);

foreach (["a","b","c"] as $key) {
print_r([
val => (string) $x->$key,
cnt => count($x->$key->children()),
]);
}

~~~~

自己放到 CoreRunner 跑一下看看咯
adami
2014-03-17 15:23:18 +08:00
simplexml_load_string 有个可选参数LIBXML_NOCDATA
undeadking
2014-03-17 18:35:21 +08:00
该不会是在处理微信数据吧?这种情况会被解析为一个空的SimpleXMLElement对象,判定一下类型然后调用__toString()方法就是了

if ('SimpleXMLElement' == get_class($node)) {
return $node->__toString();
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/104571

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX