2015-01-03 4 views
0

XML에서 Java의 특정 노드 값을 가져 오는 방법은 무엇입니까?Java에서 노드 값 DOM 찾기

필자가 볼 수있는 것과 같은 구조를 가지고 있으며 userFileds (2, 첫 번째에 대해서는 NA, 마지막에 대해서는 1) (실제 XML 데이터의 일부입니다.) :..

<element class="AufOrgKombination" hash="AOK_1414931143186_52"> 
<field name="layer">4</field><field name="name">Function </field> 
<field name="description">des</field> 
<userField hash="USERFIELD_1415779871581_0">2.0</userField> 
<userField hash="USERFIELD_1415386348389_3">N.A.</userField> 
</element> 
<element class="AufOrgKombination" hash="AOK_1414931143186_23"> 
<field name="layer">4</field><field name="name">Function 2 </field> 
<field name="description">des</field> 
<userField hash="USERFIELD_1415779871581_0">1</userField> 
</element> 

답변

0

XPath API를 사용하지 않는 것이 좋습니다. 그러나 a library that handles it for you (공개 : 해당 프로젝트의 계열사 인). XML 구조를 어떻게 든 개체 구조에 반영하려고합니다. 극복하는 데는 몇 가지 어려움이 있습니다 (네임 스페이스, 기본 네임 스페이스, 유형 변환, Java 객체에 매핑 ...). 제안 된 라이브러리를 사용하여 한 가지 가능한 해결책은 :

public class Demo { 

public interface Projection { 
    interface Element { 
     @XBRead("./userField") 
     List<String> getUserFieldValues(); 
    } 

    @XBRead("//element") 
    List<Projection.Element> getElements(); 
} 

public static void main(final String[] args) throws IOException { 
    Projection projection = new XBProjector().io().url("resource://data.xml").read(Projection.class); 
    for (Projection.Element element : projection.getElements()) { 
     for (String userField : element.getUserFieldValues()) { 
      System.out.println(userField); 
      } 
     } 
    } 
} 

이 프로그램은 인쇄합니다 :

2.0 
N.A. 
1 
0

당신은 쿼리 언어 XPath를 사용할 수 있습니다 그것은 그 목적을 위해 정확하게 설계 자바 7은 XPath를 사용하기위한 클래스의 무리와 함께 제공 된 문서와 예제 here를 참조

주.. 정확히 하나의 루트 요소가 없으므로 XML 형식이 올바르지 않은 것입니다. 은 XML 문서의 수정 잘 형성 버전

<root> 
<element class="AufOrgKombination" hash="AOK_1414931143186_52"> 
<field name="layer">4</field><field name="name">Function </field> 
<field name="description">des</field> 
<userField hash="USERFIELD_1415779871581_0">2.0</userField> 
<userField hash="USERFIELD_1415386348389_3">N.A.</userField> 
</element> 
<element class="AufOrgKombination" hash="AOK_1414931143186_23"> 
<field name="layer">4</field><field name="name">Function 2 </field> 
<field name="description">des</field> 
<userField hash="USERFIELD_1415779871581_0">1</userField> 
</element> 
</root> 

당신의 XPath 쿼리는 www.freeformatter.com/xpath-tester와 Testet (쿼리에 대한

/root/element/userField/text() 

같은 결과를 보일 것이다. html)은 다음과 같습니다.

Text='2.0' 
Text='N.A.' 
Text='1' 

이러한 Java 클래스를 사용하여 이러한 쿼리를 만들 수 있습니다.