- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我使用的是 PHP 5.3.9 版。我在使用 SimpleXML 时遇到问题,因为它在解析 xml 文件时更改了 CDATA 部分中的行结束字符。
例如:
$string = "<value><![CDATA[hello\r\nworld]]></value>";
$xml = simplexml_load_string($string);
var_dump((string)$xml);
var_dump("hello\r\nworld");
输出:
string(11) "hello world"
string(12) "hello world"
即使不查看十六进制值,您也可以立即看到 SimpleXML 解析版本正在根据字符串长度将换行符从 Windows 的“\r\n”换行符更改为 Unix 的“\n”换行符。这是一个问题,因为我想在我的 XML 文件中存储 serialize()
ed 对象,但是 serialize()
存储它序列化的任何字符串的确切长度,包括换行符。当我在读取 XML 后尝试 unserialize()
字符串时,字符串长度不再正确,因为行尾已更改并且无法正确反序列化。可以通过确保清理每个输入字符串以将“\r\n”替换为“\n”来解决此问题,但这似乎不是我应该做的事情。
我的印象是 XML 解析器不应该以任何方式解析 CDATA 元素的内容。我是否误解了 CDATA 部分的指定方式,我是否以某种方式滥用了 SimpleXML,或者这是 SimpleXML 中的错误?
最佳答案
我没听懂你的意思。
但请注意,您使用了双引号。
在我的变体中:
$string = '<value><![CDATA[hello\r\nworld]]></value>';
$xml = simplexml_load_string($string);
var_dump($xml->__toString());
var_dump((string)$xml);
$xml = new SimpleXMLElement($string);
var_dump($xml->__toString());
var_dump('hello\r\nworld');
输出
string(14) "hello\r\nworld"
string(14) "hello\r\nworld"
string(14) "hello\r\nworld"
string(14) "hello\r\nworld"
但你的期望是什么?只是告诉我们它应该是什么?
关于PHP SimpleXML 修改CDATA元素中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871572/
这里发生了什么事? $string = XML; $xml = simplexml_load_string($string); // $xmlobj = sim
当我将 SimpleXML 解析为对象数组的一部分的字符串时,我一直坚持让 SimpleXML 返回一个对象。 $a = '1145869290false43false'; $resultA = si
我有两个 SimpleXML 对象。如何将一个对象添加为另一个对象的子元素。 请注意,这不能通过 addChild 方法完成,因为它会在添加之前将给定值转换为字符串。 最佳答案 我发现 SimpleX
http://pastie.org/1701923这是从我查询邮政编码的 API 返回的 XML。 我想从每个条目中提取数据,然后直接对其进行循环或将其放入我可以循环的数组中。我似乎无法正确处理。这是
这个问题在这里已经有了答案: remove xml version tag when a xml is created in php (10 个答案) 关闭 7 年前。 我使用 SimpleXML
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。 SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:
我有一些看起来像这样的 XML: true 42 ;jsessionid=42 SimpleXML 以这种方式解析它: $obj
我有一个具有命名空间属性的 XML 文档。 XML 看起来像: 我如何提取 and
我想从元素id的属性创建一个数组,但是以下代码返回所有XML。 PHP文件: $xmlfile=simplexml_load_file("test.xml"); $test=$xmlfile->xpa
我有一个看起来像这样的XML结构: 0 Some survey question Answer 1 0 Answ
我正在尝试访问具有命名空间声明的节点中没有命名空间声明的节点列表。我的 XML 文件有一个带有命名空间 ehd 的主节点,在同一命名空间内有两个子节点 header、body。但是,主体节点内的所有子
我正在使用 SimpleXML 和 XPath 尝试获取子节点('IndexEntry)属性('indexKey')的值。节点的命名空间,我已在另一个节点(“记录”)上成功测试。由于某种原因,该节点的
我有两棵 XML 树,想将一棵树作为叶子添加到另一棵树上。 显然: $tree2->addChild('leaf', $tree1); 不起作用,因为它仅复制第一个根节点。 好吧,所以我想我应该遍历整
我正在使用 SimpleXML http://simple.sourceforge.net/home.php 在我的 Android 应用程序中, 我从 API 获取数据如下:
我想使用 SimpleXML 读取并解析包含员工信息的 XML 文件。框架。这是我的 XML 文件: 29 Pankaj
我正在尝试在 android 中使用 simplexml 解析此 xml 字符串: " " 是的,我知道门标签应该立即关闭,而不是在声明所有门标签后关闭,我无法控制这个
我有一个具有这种结构的 XML 文件:
请,我需要解析包含汽车信息的 XML 文件。我在汽车、照片中完成了所有操作,但我需要在额外的表中包含 id、汽车表 id 的外键,并且所有汽车都有随机的 Equipment_id。 我需要将其放入“设
我有一个看起来像这样的 xml: 在 xml 映射 java 代码中我有这样的东西: public class A { @Element(required=false)
我有一个xml文档如下: Calculations Description First Description Alan
我是一名优秀的程序员,十分优秀!