如何美化 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>
个标签。
如果您的字符串不在文件中,则通过将其转储到临时文件中将其从内存中取出,然后按上述步骤进行操作。
我有一个 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>
个标签。
如果您的字符串不在文件中,则通过将其转储到临时文件中将其从内存中取出,然后按上述步骤进行操作。