Проверка нескольких тегов с помощью SAXParser

1

Я не знаю, как правильно сформулировать этот вопрос, но я покажу пример.

Изображение 174551

Предположим, что я хочу знать type атрибута block тегов, block я мог бы просто

 if (localName == "block") {

    int type = Integer.parseInt(attributes.getValue("type));

Однако у меня также есть разные файлы, которые описывают сам блоктип, который использует теги <block> в качестве базовых тегов. Я должен знать, является ли атрибут дочерним с BOTH (Level/Blocktype) и блоком. Или, может быть, это под уровнями LevelArray и Block.

Надеюсь, у меня есть смысл, я не слишком много разбираюсь в Xml/xmlparsing.

-How Я ищу атрибуты из элементов, вложенных в другие элементы?

Теги:
parsing
saxparser

2 ответа

0

Вы должны следить за состоянием, когда идете. Например, вы можете иметь переменную экземпляра, называемую inBlockTag которая изначально ложна. В методе startElement, если localName.equals("block") вы можете установить inBlockTag в true. Затем, когда вы обрабатываете другие элементы, вы можете проверить значение этого флага, чтобы узнать, есть ли у вас дочерний блок или нет. Если вы это сделаете, не забудьте установить его обратно в значение false в методе endElement (опять же, когда localName.equals("block")).

0

Если я понимаю вас правильно, то, похоже, ваша проблема заключается в том, что процесс обработки атрибута type фактически зависит от структуры фактического узла; другими словами, как вы обрабатываете атрибут type зависит от того, имеет ли элемент block родительский "LevelArray", или сам block является корневым элементом документа.

В этой ситуации я думаю, вам нужно реализовать свой собственный простой автомат вокруг обратных вызовов SAX. Другими словами, есть некоторая переменная (ы), которая отслеживает, какие элементы уже были открыты и закрыты, поскольку анализатор SAX пересекает XML файл. Это было бы очень просто.

Альтернативой является использование анализатора DOM, поскольку парсер DOM дает вам возможность получать списки дочерних элементов данных элементов и т.д. Однако, если ваши требования не очень сложны, я бы придерживался анализатора SAX и просто реализовал конечный автомат как было предложено. Парсер DOM имеет супертяжелый вес и более сложный в использовании.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню