使用PHP删除结束标记XML根

时间:2013-03-06 10:15:16

标签: php xml removechild

我想删除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,因为我应该在我的问题中说明。

3 个答案:

答案 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";

Demo

这并不是写得非常严格,但可能只适合你的情况。

答案 1 :(得分:0)

显然,您想要将数据添加到现有的simplexml对象中吗?保持数据有效的其他方法:

  1. 使用simplexml的add-methods。

  2. 从带有循环的simplexml读取并使用xmlwriter写入新文件,在发送关闭根元素的命令之前添加新的xml数据。

答案 2 :(得分:0)

我通过更改读取文件的方法并将其作为文本而不是simpleXML对象来解决它。之后我只需用str_replace删除标签并添加新内容。 (我知道并不完美,但按预期工作)