Есть такая проблема! Возник вопрос как получить контент тега с помощью Digester-a.
Например такой документ
<root>
<content>
<test val="1"/>
</content>
</root>
Надо вытащить все, что написано в теге content и желательно его самого, т.е. должно получиться
<content>
<test val="1"/>
</content>
Если кто-нибуть знает как это сделать с помощью digester-а и расскажет, то буду благодарен
Здравствуйте, Blazkowicz, Вы писали:
B>Подозреваю что с помощью SAX парсера этого сделать нельзя. Только парсить в объекты а потом восстанавливать текст по этим объектам.
Ну почему же нельзя, можно. Только геморройно весьма. Нужно запоминать тэги <content> (то есть создать правило, добавляющее в стэк необходимые данные), и по приходу тэга <test val="1"/> собирать ручками нужную конструкцию.
Что-то типа того:
digester.addRule("root/content/", new ObjectCreateRule(MyContentData.class));
digester.addRule("root/content/test", new Rule() {
public void body(String namespace, String name, String text) throws Exception {
((MyData) digester.peek()).setSomeData(text);
}
});
Правда, если требуется именно org.w3c.Element, то проще пользовать DOM парсер.
Здравствуйте, Cider, Вы писали:
C>Ну почему же нельзя, можно. Только геморройно весьма. Нужно запоминать тэги <content> (то есть создать правило, добавляющее в стэк необходимые данные), и по приходу тэга <test val="1"/> собирать ручками нужную конструкцию.
C>Что-то типа того:
C>C> digester.addRule("root/content/", new ObjectCreateRule(MyContentData.class));
C> digester.addRule("root/content/test", new Rule() {
C> public void body(String namespace, String name, String text) throws Exception {
C> ((MyData) digester.peek()).setSomeData(text);
C> }
C> });
C>
C>Правда, если требуется именно org.w3c.Element, то проще пользовать DOM парсер.
Да, ты прав. Решение кидать в стек все теги и аттрибуты лучше . Но восстанавливать XML обратно по ним все равно придется.
Здравствуйте, Cider, Вы писали:
C>C> digester.addRule("root/content/", new ObjectCreateRule(MyContentData.class));
C> digester.addRule("root/content/test", new Rule() {
C> public void body(String namespace, String name, String text) throws Exception {
C> ((MyData) digester.peek()).setSomeData(text);
C> }
C> });
C>
По-моему это все таки не для любого внутреннего XML подойдет.
C>Правда, если требуется именно org.w3c.Element, то проще пользовать DOM парсер.
JDOM кстати и так умеет контент тега как текст отдавать.