我想删除XML文件的结束标记。
目前,我正在使用simplexml加载文件。
我看过removeChild,但没有找到一个很好的例子,有人用它来删除根的结束标签。
我现在有:
<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这样的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-object?其他保持数据有效的方法:
-
使用simplexml的add-methods。
使用循环从simplexml中读取并使用xmlwriter写入新文件,在发送命令关闭根元素之前添加新的xml数据。
我通过更改读取文件的方法来解决这个问题,并将其作为文本而不是simpleXML对象获取。之后,我只是用str_replace删除标记并添加新内容。(我知道不完美,但工作如预期)