1

我正在使用该包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()));
}

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

谢谢,

伊万

4

3 回答 3

1

您的 xml 文档是否引用了 dtd 或架构?如果没有其中一个,解析器就无法知道哪个空格是重要的,因此它必须保留它。

于 2011-02-28T11:46:02.473 回答
1

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

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

保留字符内容中的所有空格(不包括在换行规范化期间删除的字符)

于 2011-02-28T12:04:02.353 回答
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);
于 2012-07-05T15:44:22.223 回答