2012-01-11 4 views
5

Я использую конфигурацию XMLConfiguration с помощью механизма выражений XPATH для запроса XML-файла. Я новичок в xpath и apache, и у меня возникают проблемы с синтаксисом.Запросить пустые элементы XML с атрибутами, используя конфигурацию apache commons xpath

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

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

То, что я хочу сделать это в основном с петлей через все свободные городские атрибуты и прочитать имя и Вэла в каждой строке. Единственный способ, с помощью которого я мог бы разобраться, - это снова запросить 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); 
} 

Также преобразование вверх по вершине в строку, я не уверен, что с этим можно справиться.

+0

попробовать это 'ATTRS/атр/@ имя | // attr/@ val' – RanRag

+0

Это получило оба значения, но в длинном списке строк, так что все имена вышли, а затем все значения. В то время как они в порядке, вам, вероятно, придется выполнить некоторые математические вычисления, такие как val_pos = size()/2, после чего вы получите i + val_pos при прохождении цикла. Не очень чистый, но сохраняет некоторые запросы. До сих пор из-за ограничений по времени просто собирался повторить запрос для ясности, но все же приветствует хороший способ перебрать файл xml с общедоступными в этом формате. –

ответ

4

Один из вариантов, чтобы выбрать attr элементы и перебирать их в качестве HierarchicalConfiguration объектов:

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

Это действительно работает. Я попытался выполнить обе функции, и этот вышел быстрее (наносекунды). Оригинал: 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

Вы не должны задавать вопрос в части ответа. Это не похоже на форумы. вы можете прокомментировать или задать новый вопрос. –