Проблема с канонизатором XML - PullRequest
1 голос
/ 28 февраля 2011

Я использую пакет 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 ]

1 голос
/ 28 февраля 2011

Я думаю, что ваше ожидание может быть неверным:

Вы не говорите, какая версия XML Canonicalization, но как 1.0, так и 1.1 говорят:

Все пробелы в содержании символов сохраняется (исключая символы удалены при нормализации перевода строки)

1 голос
/ 28 февраля 2011

Ваш XML-документ ссылается на dtd или схему? Без одного из них синтаксический анализатор не сможет узнать, какой пробел является значимым, и поэтому он должен его сохранить.

0 голосов
/ 05 июля 2012

org.apache.xml.security.c14n не удаляет пробелы.

Я решил, установив setIgnoringBoundaryWhitespace = true на моем SAXBuilder:

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