我想删除XML文件的结束标记。
目前我使用simplexml来加载文件
我查看了removeChild,但没有找到一个很好的例子,有人用它来删除root的结束标记。
我目前有:
<root>
<tag>
<info1>Some info</info1>
<info2>Some info</info2>
</tag>
</root>
会变成:
<root>
<tag>
<info1>Some info</info1>
<info2>Some info</info2>
</tag>
我想这样做没有太多困难,有谁知道怎么做?
编辑: 我已按照评论中的说明解决了这个问题。 我不应该使用simpleXML,因为我应该在我的问题中说明。
答案 0 :(得分:0)
实际上像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";
这并不是写得非常严格,但可能只适合你的情况。
答案 1 :(得分:0)
显然,您想要将数据添加到现有的simplexml对象中吗?保持数据有效的其他方法:
使用simplexml的add-methods。
从带有循环的simplexml读取并使用xmlwriter写入新文件,在发送关闭根元素的命令之前添加新的xml数据。
答案 2 :(得分:0)
我通过更改读取文件的方法并将其作为文本而不是simpleXML对象来解决它。之后我只需用str_replace删除标签并添加新内容。 (我知道并不完美,但按预期工作)