Как получить значение между тегами с помощью sax contenthandler? - PullRequest
0 голосов
/ 27 марта 2012

Я анализирую некоторые XML с помощью ContentHandler, и я могу получить атрибуты внутри тегов, но я не вижу, как получить фактические значения.Например, возьмем этот простой xml:

<code>
< thing id="12345" key="abcde" >

< description > Some text is here < /description >

< otherdata > I don't actually care about or want this text < /otherdata >

< /thing >
</code>

(извинения за форматирование там ...) Итак, в моем StartElement () я могу получить значения id и ключа в порядке с att.getValue ("id") например.Но как мне получить текст между тегами описания?

Основываясь на чтении документов, похоже, что мне нужно использовать метод characters (), но это предположительно произойдет для всех других тегов в xml (реальный пример более сложный, чем приведенный выше, и мне не нужно все это) - как мне связать массив символов обратно с конкретным тегом?Все, что мне дает, - это начало и длина, но из-за этого я не знаю, к какому элементу это относится.

Я явно упускаю что-то здесь очевидное, но ни один из документов или примеров, которые я нахожу, не помогает- в большинстве примеров просто показан весь документ, впрыскиваемый в консоль, что хорошо, но не помогает в моем сценарии.

Ответы [ 3 ]

2 голосов
/ 27 марта 2012

Вы можете поместить значение флага всякий раз, когда вы анализируете описание внутри startElement(), и делать его ложным внутри endElement().Между ними вы можете иметь значение description в методе characters().

1 голос
/ 27 марта 2012

SAX - это низкоуровневый API для анализа, и вы платите за это тем, что вам приходится управлять контекстом и состоянием в коде приложения.Почти все приложения SAX поддерживают стек имен элементов, поэтому, когда приходит текст, вы знаете, к какому элементу он принадлежит, путем peek () в стеке.

SAX, кажется, становится очень популярным в Android,и я не уверен, что это потому, что больше ничего не доступно или потому что нужна эффективность.Но дело в том, что SAX - очень сложный интерфейс для программирования, и за высокую производительность вы платите высокую цену за удобство использования.

1 голос
/ 27 марта 2012

use _data.sectionId = atts.getValue ("id");

см. Эту ссылку для подробного примера http://www.jondev.net/articles/Android_XML_SAX_Parser_Example

...