Как получить атрибут XML из SubnodeConfiguration? - PullRequest
4 голосов
/ 13 марта 2012

Я работаю над классом для загрузки конфигурации файла XML, и этот класс расширяется от XMLConfiguration.

Файл конфигурации выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <global>
        <reloadInterval>5</reloadInterval>
    </global>

    <definitions>
        <definition>
            <id>1</id>
            <name>Test name</name>
            <messages>
                <message id="1">Help menu opt 1</message>
                <message id="2">Help menu opt 2</message>
                <message id="3">Help menu opt 3</message>
            </messages>
        </definition>
    </definitions>
</root>

То, как яитерация и загрузка происходит следующим образом:

   private void updateDefinitions()
   {
      this.definitions.clear();

      List<SubnodeConfiguration> lstDefinitions = getListConfig("definitions");
      for(SubnodeConfiguration definition : lstDefinitions)
      {
         DefinitionBean aDefinition = new DefinitionBean();

         aDefinition.setId(definition.getInt("Definition.id", -1));
         aDefinition.setName(definition.getString("Definition.name", ""));

         List<MessageBean> messages = new ArrayList<MessageBean>();
         List<SubnodeConfiguration> lstMessages = definition.configurationsAt("definition.messages");
         for(SubnodeConfiguration messageBean : lstMessages)
         {
            MessageBean message = new MessageBean();

            message.setId(messageBean.getString("message"));
            messages.add(message);
         }

         definition.setMessages(messages);
         this.definitions.put(aDefinition.getId(), aDefinition);

      }
   }

Код работает нормально, однако проблема в том, чтобы получить атрибут id для каждого элемента <message>, я не знаю, как получитьЭто.Ни один из методов получения для SubnodeConfiguration не обеспечивает это, или, может быть, я делаю это неправильно.

Любая помощь будет оценена.

1 Ответ

6 голосов
/ 19 апреля 2012

Я вижу ваш комментарий, но он также находится в документации здесь .SubnodeConfiguration расширяет HierarchicalConfiguration.

Кроме того, если вы получаете конфигурацию с использованием метода HierarchicalConfiguration.configurationsAt () , а узел, который вы извлекаете, сам по себе имеет атрибуты, вы просто получаете к нему доступ с помощьюквадратная скобка + @ обозначение.Например:

Xml:

<foos>
  <foo bar='bazz'/>
  <foo bar='bizz'/>
  <foo bar='buzz'/>
</foos>

Java:

// load xml into config
XmlConfiguration config = ...
List<HierarchicalConfiguration> foos = config.configurationsAt("foo");
for (HierarchicalConfiguration foo : foos) {
    System.out.println(foo.getString("[@bar]"));
}

Следует напечатать:

bazz
bizz
buzz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...