Как вытащить контент тега XML с помощью Digester
От: ssmirnov  
Дата: 15.05.06 13:13
Оценка:
Есть такая проблема! Возник вопрос как получить контент тега с помощью Digester-a.
Например такой документ
<root>
<content>
<test val="1"/>
</content>
</root>

Надо вытащить все, что написано в теге content и желательно его самого, т.е. должно получиться
<content>
<test val="1"/>
</content>
Если кто-нибуть знает как это сделать с помощью digester-а и расскажет, то буду благодарен
Re: Как вытащить контент тега XML с помощью Digester
От: Blazkowicz Россия  
Дата: 15.05.06 14:39
Оценка:
Здравствуйте, ssmirnov, Вы писали:

S>Есть такая проблема! Возник вопрос как получить контент тега с помощью Digester-a.

S>Например такой документ
S><root>
S> <content>
S> <test val="1"/>
S> </content>
S></root>

S>Надо вытащить все, что написано в теге content и желательно его самого, т.е. должно получиться

S><content>
S> <test val="1"/>
S></content>
S>Если кто-нибуть знает как это сделать с помощью digester-а и расскажет, то буду благодарен

Подозреваю что с помощью SAX парсера этого сделать нельзя. Только парсить в объекты а потом восстанавливать текст по этим объектам.
Re[2]: Как вытащить контент тега XML с помощью Digester
От: Cider Россия  
Дата: 15.05.06 15:23
Оценка:
Здравствуйте, 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
Re[3]: Как вытащить контент тега XML с помощью Digester
От: Blazkowicz Россия  
Дата: 15.05.06 15:28
Оценка:
Здравствуйте, 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 обратно по ним все равно придется.
Re[3]: Как вытащить контент тега XML с помощью Digester
От: Blazkowicz Россия  
Дата: 15.05.06 15:45
Оценка:
Здравствуйте, 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 кстати и так умеет контент тега как текст отдавать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.