<Map>

2011-11-29 3 views
1

내가 아래 예와 같은 XML 데이터를 나열하는 XML ..<Map>

나는지도에 각 직원에 대한 정보를 저장할
<EMP> 
    <PERSONAL_DATA> 
    <EMPLID>AA0001</EMPLID> 
    <NAME>Adams<NAME> 
    </PERSONAL_DATA> 
    <PERSONAL_DATA> 
    <EMPLID>AA0002<EMPLID> 
    <NAME>Paul<NAME> 
    </PERSONAL_DATA> 
</EMP> 

(KEY, VALUE) KEY = 태그 이름, VALUE = 값을 변환하는 방법 그리고 Java에서 XPATH를 사용하여 모든 사원에 대한 LIST를 작성하려고합니다. 내가 어떻게하는지? 을 알려주세요. 감사합니다.

+0

가능한 중복 [추출 XML 정보는 XPath를 사용하여 을 나열하기] (http://stackoverflow.com/questions/8296126/를 –

+0

@Sandeep - 어제 물어 본 질문과 정확히 일치하므로 투표 마감되었습니다. 그러나 나는 그 다른 질문에 대한 답을 주었다. 여기에 : http://stackoverflow.com/questions/8296126/extract-xml-information-to-listmap-using-xpath/8316642#8316642 –

답변

3

JAXB를 사용할 수 있습니다.

나는 적어도 2 개의 해결책을 볼 수있다. 첫째, : emplidname 필드를 가진 클래스 PersonalData을 생성하십시오. 주석을 @XmlElement 개의 주석으로 표시하십시오. XML을 구문 분석하십시오. 그러면 PersonalData 인스턴스의 콜렉션이 작성됩니다. 이제이 콜렉션을 반복하고 실제로 필요한 경우 맵을 작성하십시오.

하지만 XML을 직접 매핑 할 수 있습니다. 다음 blog을 살펴보십시오.

0

왜 XPATH를 사용합니까? `String expression = "// EMP/PERSONAL_DATA/*";
XPathExpression expr = xpath.compile (expression);

 Object result = expr.evaluate(doc, XPathConstants.NODESET); 
    NodeList nodes = (NodeList) result; 

    List<Map> list = new ArrayList<Map>(); 

    for (int i = 0; i < nodes.getLength(); i++) { 
      Node node = nodes.item(i); 
      Map<String,String> nodeMap = new HashMap<String,String>(); 
      if (node.getNodeName()!=null){     
       nodeMap.put(node.getNodeName(), node.getTextContent()); 
       list.add(nodeMap); 
      } 
    }` 
+0

고마워. 내가 몇 가지 정보를 필터링해야하기 때문에 XPATH를 사용하고있다. XML (i 예제 만 제공)하지만 코드에서 가능한 경우 어떻게 할 수 있습니까 [ ...] 일부 요소는 중첩 된 요소가 있음을 의미합니다. 재귀를 사용했지만 올바르게 작동하지 않습니다. 어떤 제안이라도 있으면 환영합니다. .. – Sandeep

+0

내 코드 if (node.getNodeName()! = null) { nodeMap.put (node.getNodeName(), node.getTextContent()); list.add (nodeMap); } 하나의 직원 정보를 하나의지도에 넣을 수있는 방법. 나는 EMPLID와 NAME을 하나의 맵에 넣고 다른 맵으로 두 번째로 넣고 MAP의리스트를 만들고 싶다. – Sandeep

+0

완전한 질문은 http://stackoverflow.com/questions/8296126/extract-xml-information-to- 가능하다면 listmap-using-xpath pls 좀 봐 주셔서 감사합니다 ... – Sandeep

1

당신은 정상 jaxp 물건을 사용하거나 그루비 시도 할 수 있습니다 :

String xml='''<EMP> 
    <PERSONAL_DATA> 
    <EMPLID>AA0001</EMPLID> 
    <NAME>Adams</NAME> 
    </PERSONAL_DATA> 
    <PERSONAL_DATA> 
    <EMPLID>AA0002</EMPLID> 
    <NAME>Paul</NAME> 
    </PERSONAL_DATA> 
</EMP> 
''' 
Node parsed=new XmlParser().parseText(xml) 
List<Map> list=[] 
parsed.each { 
    Map<String,String> map=[:] 
    it.children().each { 
     map[it.name()]=it.value()[0] 
     println "${it.name()} ${it.value()[0]}" 
    } 
    list.add(map) 
} 
println list 
+0

내 완벽한 질문은 http://stackoverflow.com/questions/8296126/extract-xml-information-to-listmap-using-xpath pls처럼 보입니다. 가능한 경우 – Sandeep

+0

http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html - 샘플이 정상적으로 작동합니다. 나는 xpath에 익숙하지 않다. 나는이 XML을 사용하여 속일려고했지만 기쁨은 없다. –