2012-01-11 4 views
5

XML 파일을 쿼리하기 위해 XPATH 표현 엔진과 함께 아파치 커먼즈 설정 XMLConfiguration 객체를 사용하고 있습니다. 나는 xpath와 아파치 공유지에 익숙하지 않고 문법에 문제가있다. 내가 기본적으로하고 싶은 것은 모든 속성을 통해 공유지 루프이며, 각 라인에서 이름과 발을 읽을아파치 커먼즈 구성을 사용하여 속성이있는 빈 XML 요소 쿼리 xpath

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

: 같은

XML 파일 보인다. 모든 것을 잡으려고 노력할 수있는 유일한 방법은 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

노력이'바인드합니다/ATTR /의 값 이름을 가져다 줄까 | // 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

답변 부분에서 질문하지 않아야합니다. 그것은 포럼 같지 않습니다. 귀하는 새로운 질문에 대해 의견을 말하거나 요청할 수 있습니다. –