XML Canonicalizer问题

时间:2011-02-28 10:46:55

标签: java xml canonicalization

我正在使用包org.apache.xml.security.c14n来规范XML。我使用以下代码:

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()));
}

然而,它似乎没有像我预期的那样工作,因为它不会删除元素之间任何不必要的空白区域。我做错了吗?

谢谢,

伊万

3 个答案:

答案 0 :(得分:1)

您的xml文档是引用dtd还是架构?如果没有其中一个解析器无法知道哪个空白是重要的,那么它必须保留它。

答案 1 :(得分:1)

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

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

  

角色内容中的所有空格都是   保留(不包括删除的字符   在换行标准化期间)

答案 2 :(得分:0)

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);