2012-01-11 15 views
5

XMLファイルを照会するために、XPATH式エンジンでApache Commons構成のXMLConfigurationオブジェクトを使用しています。私はxpathとapacheのコモンズが新しく、構文に問題があります。私は基本的にやりたいことはすべての属性を通じてコモンズループであり、各ラインで名前とvalを読むapacheコモンの設定を使用して属性を持つ空のXML要素を照会します。xpath

<attrs> 
    <attr name="my_name" val="the_val"/> 
    <attr name="my_name2" val="the_val2"/> 
</attrs> 

:よう

xmlファイルを検索します。私がすべてをつかむために動くことができる唯一の方法は、nameの値でxmlを再度照会することです。この種のことは私にとっては間違っていると感じています。もっと良い方法がありますか?

List<String> names = config.getList("attrs/attr/@name"); 
for(String name : names) 
{ 
    String val = config.getString("attrs/attr[@name='" +name +"']/@val"); 
    System.out.println("name:" +name +" VAL:" +val); 
} 

また、文字列に変換する上で、私はそれに対処する正しい方法がわかりません。非常にきれいではないが、それが動作することを

List<HierarchicalConfiguration> nodes = config.configurationsAt("attrs/attr"); 
for(HierarchicalConfiguration c : nodes) { 
    ConfigurationNode node = c.getRootNode(); 
    System.out.println(
     "name:" + ((ConfigurationNode) 
          node.getAttributes("name").get(0)).getValue() + 
     " VAL:" + ((ConfigurationNode) 
          node.getAttributes("val").get(0)).getValue()); 
} 

+0

してみてください。この 'attrsに/ attrの/の値ファーストネームを取得したいです| // attr/@ val' – RanRag

+0

これは両方の値を持っていますが、すべての名前が出てきてすべての値が続くような長い文字列リストにあります。順序が整っている間は、おそらくval_pos = size()/ 2のような計算をしてからループを進めるとi + val_posを得る必要があります。あまり清潔ではありませんが、いくつかのクエリを保存します。これまでのところ、時間の制約のために、再度明確にするために再度クエリすることに固執しますが、その形式のコモンでxmlファイルをループする良い方法を歓迎します。 –

答えて

4

1つのオプションは、attr要素を選択し、HierarchicalConfigurationオブジェクトとしてそれらを反復することです。

+0

これは実際に動作します。私は両方の機能を時間をかけようとしましたが、これはより速く(ナノ秒)出てきました。オリジナル:295,377,206これは:12,712,510ありがとう!このメソッドで動作します。 –

0

このXMLサンプルのように、特定の属性に一致するタグの値をコモンズXML設定を使用して取得するにはどうすればよいですか?

<attrs> 
    <attr name="my_name"> First Name</attr> 
    <attr name="my_name2"> First Name 2 </attr> 
</attrs> 

名@一致MY_NAME属性値

+0

答えの部分で質問しないでください。それはフォーラムのようなものではありません。コメントしたり、新しい質問をしたりすることができます。 –

関連する問題