Java XML规范化程序问题

Java XML规范化程序问题,java,xml,canonicalization,Java,Xml,Canonicalization,我正在使用包org.apache.xml.security.c14n对XMLs进行规范化。我使用以下代码: private String CanonicalizeXML(String XML) throws InvalidCanonicalizerException, CanonicalizationException, ParserConfigurationException, IOException, SAXException { Canonicalizer canon = Can

我正在使用包
org.apache.xml.security.c14n
对XMLs进行规范化。我使用以下代码:

private String CanonicalizeXML(String XML) throws InvalidCanonicalizerException, CanonicalizationException, ParserConfigurationException, IOException, SAXException {

    Canonicalizer canon = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
    return new String(canon.canonicalize(XML.getBytes()));
}
然而,它似乎并没有像我预期的那样工作,因为它没有删除元素之间任何不必要的空格。我做错什么了吗

谢谢


Ivan

您的xml文档是否引用dtd或模式?如果没有这些空白,解析器就无法知道哪个空白是重要的,因此必须保留它

我认为可能是你的期望不正确:

您没有说明XML规范化的哪个版本,但1.0和1.1都说明:

字符内容中的所有空白都是 保留(不包括删除的字符) 在换料过程中(正常化)


org.apache.xml.security.c14n不会删除空白

我通过在SAXBuilder上设置setIgnoringBoundaryWhitespace=true来解决:

SAXBuilder builder = new SAXBuilder ();
builder.setIgnoringBoundaryWhitespace(true);
org.jdom2.Document doc = builder.build(is);
DOMOutputter out = new DOMOutputter();
Document docW3 = out.output(doc);

隐马尔可夫模型。。。这解释了很多。我没有模式,但我显然必须创建一个。或者有没有另一种方法可以强制它删除不相关的空格?类似于一个非常简单的模式之类的东西。我想要任何删除空格的版本。如何做到这一点?