TextNode'ы между тегов
Есть XML Schema:
Есть XML:
Фигня в том, что при обходе этого XML'я через DOM у entry 5 детей, т.к. переводы строк между тегами внутри entry являются TextNode'ами, несмотря на то, что схема (если я правильно понимаю то, что я в неё написал) не позволяет быть никаким детям у entry за исключением key и value.
Вопрос, можно ли как-то изменить поведение dom-парсера, чтобы там не было этих текстовых нодов?
Вот так я инициализирую парсер:
UPDATE:
Внимание, читаем Javadoc для DocumentBuilderFactory.html#setIgnoringE lementContentWhitespace(boolean):
Specifies that the parsers created by this factory must eliminate whitespace in element content (sometimes known loosely as 'ignorable whitespace') when parsing XML documents (see XML Rec 2.10). Note that only whitespace which is directly contained within element content that has an element only content model (see XML Rec 3.2.1) will be eliminated. Due to reliance on the content model this setting requires the parser to be in validating mode.
Ну и? Чем оно не element only content model? Видимо пора писать багрепорт и менять парсер.
UPDATE2:
А вот и багрепорт: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4867706 Май 2001. Я фигею, дорогая редакция.
UPDATE3:
А вот, кажется, и workaround: http://forum.java.sun.com/thread.jspa?forumID=34&threadID=450699
UPDATE4:
Предложенный выше workaround (по крайней мере на JRE 6.0) не работает. Пришлось-таки пройтись по дереву и удалить лишние ноды.
Варианты более красивого решения:
Удаление лишних нодов:
Ноды не удаляются сразу, а складываются в список, ибо иначе поломается getNextSibling().
Есть XML:
Фигня в том, что при обходе этого XML'я через DOM у entry 5 детей, т.к. переводы строк между тегами внутри entry являются TextNode'ами, несмотря на то, что схема (если я правильно понимаю то, что я в неё написал) не позволяет быть никаким детям у entry за исключением key и value.
Вопрос, можно ли как-то изменить поведение dom-парсера, чтобы там не было этих текстовых нодов?
Вот так я инициализирую парсер:
UPDATE:
Внимание, читаем Javadoc для DocumentBuilderFactory.html#setIgnoringE
Specifies that the parsers created by this factory must eliminate whitespace in element content (sometimes known loosely as 'ignorable whitespace') when parsing XML documents (see XML Rec 2.10). Note that only whitespace which is directly contained within element content that has an element only content model (see XML Rec 3.2.1) will be eliminated. Due to reliance on the content model this setting requires the parser to be in validating mode.
Ну и? Чем оно не element only content model? Видимо пора писать багрепорт и менять парсер.
UPDATE2:
А вот и багрепорт: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4867706 Май 2001. Я фигею, дорогая редакция.
UPDATE3:
А вот, кажется, и workaround: http://forum.java.sun.com/thread.jspa?forumID=34&threadID=450699
UPDATE4:
Предложенный выше workaround (по крайней мере на JRE 6.0) не работает. Пришлось-таки пройтись по дереву и удалить лишние ноды.
Варианты более красивого решения:
- Найти билдер, который понимает setIgnoringElementContentWhitespace
- Написать патч для xerces и отправить в apache/sun.
- Отэкстендиться от какого-нибудь билдера и реализовать эту функциональность.
Удаление лишних нодов:
Ноды не удаляются сразу, а складываются в список, ибо иначе поломается getNextSibling().
