2012-03-13 14 views
4

XMLファイル設定を読み込むためのクラスを作成中です。このクラスはXMLConfigurationから拡張されています。SubnodeConfigurationからXML属性を取り出す方法は?

設定ファイルは次のようになります。

<?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); 

     } 
    } 

、しかし、問題がにあります各<message>要素のid属性を取得するには、それを取得する方法がわかりません。 SubnodeConfigurationのゲッターのどれもこれを提供していない、あるいは私は正しい方法でそれをやっていないだろう。

ご協力いただければ幸いです。

+0

[OK]を、私はそれを見つけました。どのように私はそれを見つけたのですか?getKeys()列挙子を次のように繰り返しました: Iterator iter = messageBean.getKeys(); オブジェクト値。 while(iter.hasNext()) { 値=(iter.next()); System.out.println(value.toString()); } 属性「id」にアクセスするには、次のようにしなければならないことに気づきました。 messageBean.getString( "message [@id]") 誰かが探している場合に役立ちますそれ。 Fer –

答えて

5

あなたのコメントが表示されますが、documentation hereにも記載されています。 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 
+0

大変ありがとう@Spencer、非常に役に立ちました –

+0

「foo」キーの名前がわからない場合、どのようにして 'bar'アトリビュートの値を取得できますか? –

+0

@jetma Dunno。 3.5年が長すぎてこれを何か思い出すことはできません。 JavaDocはあなたに指示するか、デバッグして再生するだけです。 :-) –

関連する問題