2011-02-28 85 views
1

我正在使用程序包org.apache.xml.security.c14n进行XML规范化。我使用下面的代码: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())); 
} 

然而,它似乎并没有工作,我意料之中的,因为它不会删除元素之间的任何非必要的空格。我做错了什么?

感谢,

伊万

回答

1

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

你不说,XML规范化的版本,但是1.0和1.1说:

在字符内容全部空白是 保留(不包括在换行标准化期间删除的字符 )

+0

我想要删除空格的任何版本。如何实现这一目标? – Ivan 2011-02-28 12:12:48

1

是您的xml文件引用DTD或模式?如果没有其中一个解析器无法知道哪些空格是重要的,那么它必须保留它。

+0

嗯...这解释了很多。我没有模式,但我显然必须创建一个模式。或者还有另外一种方法来强制它删除空格,因为它们是不相关的?就像一个非常简单的模式或其他东西。 – Ivan 2011-02-28 11:56:03

0

org.apache.xml.security.c14n不删除空格。

我通过设置setIgnoringBoundaryWhitespace =真我SAXBuilder的解决:

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