我正在使用包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()));
}
然而,它似乎没有像我预期的那样工作,因为它不会删除元素之间任何不必要的空白区域。我做错了吗?
谢谢,
伊万
答案 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);