如何美化 XML 中的字符串 Java

How to prettify XML String in Java

我有一个 XML 字符串,它的格式不正确。我想使用 Java 进行适当的缩进。关于这个问题,SO 上有很多答案。最广泛接受和出色的答案之一是这个:

Pretty print XML in java 8

但是这个答案的问题是,代码总是需要一个根元素,而我的字符串中有 XML 标签,如下所示:

<person>
<address>New York</address>
</person>
<person>
<address>Ottawa</address>
</person>

如您所见,此处没有根元素。只是人的多个标签。

我已尝试查看上述答案中使用的库中可用的任何方法。但是没有用。

不知道有没有出路。但是,如果有人能想到一些东西,我将非常感激。

P.S。在将此标记为重复之前,请阅读问题。我知道在 SO 上也有类似的问题,但我的问题完全不同。

您可以使用字符串操作来关闭;

假设您的结构在一个名为 xml;

的字符串中
<person>
<address>New York</address>
</person>
<person>
<address>Ottawa</address>
</person>

然后添加一个根元素;

xml = "<myDummyRoot>" + xml + "</myDummyRoot>";

给出结构

<myDummyRoot>
<person>
<address>New York</address>
</person>
<person>
<address>Ottawa</address>
</person>
</myDummyRoot>

这是一个有效的 XML 文档,应该可以使用链接的方法进行意图,给出类似的东西;

<myDummyRoot>
    <person>
        <address>New York</address>
    </person>
    <person>
        <address>Ottawa</address>
    </person>
</myDummyRoot>

一个简单的字符串 replaceAll 然后可以再次删除根元素

xml = xml.replaceAll("</?myDummyRoot>", "");

...这应该会给您留下一个可读的 XML 文档(尽管缩进了一些额外的间距)。

看来您的主要问题不是美化 XML,而是内存管理。 Joachim 为您提供了一个完美的美化方法,但您没有足够的内存来实现它。

假设您的字符串来自文件,您应该使用不需要一次加载整个文件的文件操作技术。您可以使用 FileInputStream 和 FileOutputStream 创建具有根打开和关闭元素的文件的临时副本。然后,您可以使用 XMLStreamReader 一次浏览 <person> 个标签。

如果您的字符串不在文件中,则通过将其转储到临时文件中将其从内存中取出,然后按上述步骤进行操作。