0

我想删除 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。

4

3 回答 3

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

演示

严格来说,这并不是写得很好,但是可能只适合您的情况。

于 2013-03-06T10:42:35.097 回答
0

显然您想将数据添加到现有的 simplexml-object 中?保持数据有效的其他方法:

  1. 使用 simplexml 的添加方法。

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

于 2013-03-06T12:04:52.903 回答
0

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

于 2013-04-15T14:03:49.867 回答