Java: XML规范化

18
什么是在Java中制作XML文件规范格式的最简单方法?您有一些完成的代码吗?我在网上找到了几个链接,例如这个这个这个,但我无法使它们正常工作 :/
谢谢,
伊万
编辑:我使用了下面提出的规范器,但是我得到了奇怪的结果。更确切地说,此方法不会删除元素之间的空格...我得到的就是这样的结果:
<Metric xmlns="http://www.ibm.com/wsla" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="total_memory_consumption_metric" type="double" unit="Mbit" xsi:schemaLocation="http://www.ibm.com/wsla WSLA.xsd">                        <Source>ServiceProvider</Source>                        <MeasurementDirective resultType="double" xsi:type="StatusRequest">                              <RequestURI> ***unused*** </RequestURI>                        </MeasurementDirective>                  </Metric>

同样的问题,你现在解决了吗? - pwillemet
2个回答

27

Canonicalizer类来自Apache XML安全项目

初始化库。

org.apache.xml.security.Init.init(); 

转换您的 XML。

Canonicalizer canon = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
byte canonXmlBytes[] = canon.canonicalize(yourXmlBytes);
String canonXmlString = new String(canonXmlBytes);

22
如果你之前没有使用过Apache XML安全库,那么在调用库中的任何代码之前,必须使用静态方法"org.apache.xml.security.Init.init()"初始化该库,否则会出现错误。请注意不要改变原文意思,使翻译更加易于理解,但不要添加解释或其他内容。 - Stew
1
@Stew提出的观点非常重要。它真的应该成为答案本身的一部分。 - aroth
我发现这个解决方案在规范化后变成"??"的表情符号上不起作用。 - Solomon Tam
1
@Stew,我将你的库初始化添加到了原始答案中。迟做总比不做好 :) - eolith

2

这是更好的选择。在我的情况下,我首先调用了Serializer,然后将结果传递给Canonicalizer。结果是一个更易读的规范化XML。 - Georgios F.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接