用PHP删除结束标记XML根
问题描述:
我想删除XML文件的结束标记。
目前我正在使用simplexml来加载文件。
我已经看过removeChild,但还没有找到一个用它来删除根结尾标记的好例子。用PHP删除结束标记XML根
我目前有:
<root>
<tag>
<info1>Some info</info1>
<info2>Some info</info2>
</tag>
</root>
将成为:
<root>
<tag>
<info1>Some info</info1>
<info2>Some info</info2>
</tag>
我想这样做没有太大困难,有人知道怎么样?
编辑: 我已经解决了这个问题,如评论中所述。 使用simpleXML并不是必需的,因为我应该在我的问题中说明。
答
我解决了它通过改变读取文件的方法,并获取它作为文本,而不是simpleXML对象。之后,我只需使用str_replace删除标签并添加新内容即可。 (不完美我知道,但按预期工作)
答
实际上,像SimpleXML这样的XML解析器无法创建无效的XML,因此这不是一个选项。
但它显然是最后一行。因此,您可以搜索第二个最后一行分隔符并将其切掉。这应该很容易做到。当你写的是SimpleXML的,当你返回XML字符串作为行分隔为"\xA"
(为US-ASCII/ISO-8859-1/UTF-8编码的XML文件,通常情况下):
$xml = $simpleXml->asXML();
$last = strrpos($xml, "\xA", -2);
if ($last === false) {
throw new UnexpectedValueException('Can not find beginning of last line.');
}
echo substr($xml, 0, $last), "\n";
这是没有什么严格写得很好,但可能只适合你的情况。
答
显然你想添加数据到你现有的simplexml对象?保持数据有效的其他方法:
使用simplexml的add-methods。
使用循环从simplexml中读取并使用xmlwriter写入新文件,在发送命令关闭根元素之前添加新的xml数据。
这不会导致XML损坏吗? – 2013-03-06 10:16:12
它会,但我稍后将它重新添加回到文件中。 – Parrotmaster 2013-03-06 10:17:48
如果您确定它始终以该文件最后一行中的该标记结尾,则可以将文件的最后一行剥离。 – Tyil 2013-03-06 10:29:25