1

org.apache.xml.security.c14nXMLの正規化にパッケージを使用しています。私は次のコードを使用します:

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またはスキーマを参照していますか?それらの1つがないと、パーサーはどの空白が重要であるかを知る方法がないため、それを保持する必要があります。

于 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 に答える