我有一个格式不正确的XML String。我想使用Java进行适当的缩进。关于这个问题,关于SO有很多答案。其中一个最广为接受和最出色的答案是:
但这个答案的问题是,代码总是需要一个根元素,而我的String中有XML标签,如下所示:
<person>
<address>New York</address>
</person>
<person>
<address>Ottawa</address>
</person>
正如您所看到的,这里没有根元素。只是多个人的标签。
我试图看到上述答案中使用的库中提供的任何方法。但没有用。
我不知道是否有出路。但如果有人能想到某些东西,我会非常感激。
P.S。请在将此标记为重复之前请阅读,请阅读问题。我知道在SO上有类似的问题,但我的问题却完全不同。
答案 0 :(得分:1)
您可以使用字符串操作来关闭;
假设您的结构名为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文档(尽管缩进了一些额外的间距)。
答案 1 :(得分:1)
似乎你的主要问题不是美化XML,而是内存管理。 Joachim给了你一个非常好的方法来美化它,但你没有足够的内存来实现它。
假设您的字符串来自文件,您应该使用不需要一次加载整个文件的文件操作技术。您可以使用FileInputStream和FileOutputStream来创建具有根开始和结束元素的文件的临时副本。然后,您可以使用XMLStreamReader逐个浏览<person>
个标记。
如果您的字符串不在文件中,则将其转储到临时文件中,然后按上述步骤将其从内存中取出。
答案 2 :(得分:0)
Undercore-java库具有静态方法U.formatXml(xml)
。我是该项目的维护者。