Я не знаю, как правильно сформулировать этот вопрос, но я покажу пример.
Предположим, что я хочу знать type
атрибута block
тегов, block
я мог бы просто
if (localName == "block") {
int type = Integer.parseInt(attributes.getValue("type));
Однако у меня также есть разные файлы, которые описывают сам блоктип, который использует теги <block> в качестве базовых тегов. Я должен знать, является ли атрибут дочерним с BOTH (Level/Blocktype) и блоком. Или, может быть, это под уровнями LevelArray и Block.
Надеюсь, у меня есть смысл, я не слишком много разбираюсь в Xml/xmlparsing.
-How Я ищу атрибуты из элементов, вложенных в другие элементы?
Вы должны следить за состоянием, когда идете. Например, вы можете иметь переменную экземпляра, называемую inBlockTag
которая изначально ложна. В методе startElement
, если localName.equals("block")
вы можете установить inBlockTag
в true. Затем, когда вы обрабатываете другие элементы, вы можете проверить значение этого флага, чтобы узнать, есть ли у вас дочерний блок или нет. Если вы это сделаете, не забудьте установить его обратно в значение false в методе endElement (опять же, когда localName.equals("block")
).
Если я понимаю вас правильно, то, похоже, ваша проблема заключается в том, что процесс обработки атрибута type
фактически зависит от структуры фактического узла; другими словами, как вы обрабатываете атрибут type
зависит от того, имеет ли элемент block
родительский "LevelArray", или сам block
является корневым элементом документа.
В этой ситуации я думаю, вам нужно реализовать свой собственный простой автомат вокруг обратных вызовов SAX. Другими словами, есть некоторая переменная (ы), которая отслеживает, какие элементы уже были открыты и закрыты, поскольку анализатор SAX пересекает XML файл. Это было бы очень просто.
Альтернативой является использование анализатора DOM, поскольку парсер DOM дает вам возможность получать списки дочерних элементов данных элементов и т.д. Однако, если ваши требования не очень сложны, я бы придерживался анализатора SAX и просто реализовал конечный автомат как было предложено. Парсер DOM имеет супертяжелый вес и более сложный в использовании.