如何在Java中美化XML字符串
我有一个格式不正确的XML字符串。我想用Java做适当的缩进。关于这个问题有很多答案。其中一个最广为接受、最精彩的答案是: 但是这个答案的问题是,代码总是需要一个根元素,而我的字符串中有如下XML标记:如何在Java中美化XML字符串,java,xml,dom,pretty-print,transformer,Java,Xml,Dom,Pretty Print,Transformer,我有一个格式不正确的XML字符串。我想用Java做适当的缩进。关于这个问题有很多答案。其中一个最广为接受、最精彩的答案是: 但是这个答案的问题是,代码总是需要一个根元素,而我的字符串中有如下XML标记: <person> <address>New York</address> </person> <person> <address>Ottawa</address> </person> 纽约 渥太
<person>
<address>New York</address>
</person>
<person>
<address>Ottawa</address>
</person>
纽约
渥太华
正如您所看到的,这里没有根元素。只是多个标签的人
我试着从上面的答案中使用的库中查看任何可用的方法。但是没有用
我不知道是否有出路。但是如果有人能想到一些东西,我会非常感激
p.S.请先阅读问题,然后再将其标记为副本。我知道有类似的问题,但我的问题是完全不同的。你可以使用字符串操作来接近 假设您的结构是一个名为
xml
的字符串
<person>
<address>New York</address>
</person>
<person>
<address>Ottawa</address>
</person>
纽约
渥太华
然后添加一个根元素
xml = "<myDummyRoot>" + xml + "</myDummyRoot>";
xml=”“+xml+”;
它给出了结构
<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.replaceAll(“,”);
…这将为您留下一个可读的XML文档(尽管缩进时有一些额外的间距)。您的主要问题似乎不是美化XML,而是内存管理。Joachim为您提供了一个完美的美化方法,但您没有足够的内存来实现它 假设您的字符串来自一个文件,您应该使用不需要一次加载整个文件的文件操作技术。您可以使用FileInputStream和FileOutputStream创建具有根打开和关闭元素的文件的临时副本。然后,您可以使用XMLStreamReader逐个查看
标记
如果您的字符串不在文件中,则通过将其转储到临时文件中,将其从内存中取出,然后按上述步骤进行操作。如果您的XML没有根元素,则它无效。通过字符串操作添加根元素,使用方法缩进,然后通过字符串操作再次删除它?这里的第一个问题不应该是“如何做”,而是“为什么需要它”?通常不需要漂亮的打印,尤其是当程序处理XML时(通常是这样)。@seelenVirtuse XML不需要缩进进行处理,它需要缩进,以便我可以以更美观、可读的方式将其输出到文件中。您正在将无效的XML文件返回给用户?实际上,我可以获取对象块,然后执行伪附加,比如每次执行1000次,然后对其进行美化,并以这种方式执行100次。。这实际上是可行的。我不确定你是否也有同样的建议。但你的想法应该行得通。非常感谢,伙计。实际上数据不是来自文件。它来自DB,在DB中作为连接字符串返回。我知道这很奇怪,但这就是应用程序的意图。