2011-07-07 4 views
8

xml을 dom 및 DocumentBuilder로 구문 분석하는 데 약간의 문제가 있습니다. 내가 노력하고있어NodeList 및 DocumentBuilder를 사용하여 XML 구문 분석

<?xml version="1.0" encoding="utf-8"?> 
<LabTests> 
    <LabTest type="specialty" name="Anti-FXa activity" id="antiFXa" order="16"> 
     <values unit="U/mL" default="N/A"> 
      <value type="increased" val="0"> 
       <conditions> 
        <condition>Heparin effect</condition> 
       </conditions> 
      </value> 
      <value type="normal" val=""> 
       <conditions></conditions> 
      </value> 
      <value type="decreased" val=""> 
       <conditions></conditions> 
      </value> 
     </values> 
    </LabTest> 
    <LabTest type="general" name="aPTT" id="aPTT" order=""> 
     <values unit="secs" default="N/A"> 
      <value type="increased" val=""> 
       <conditions> 
        <condition>Acquired hemophilia</condition> 
        <condition>Acquired vWD</condition> 
        <condition>DIC</condition> 
        <condition>Dysfibrinogenemia</condition> 
        <condition>FI deficiency</condition> 
        <condition>FII deficiency</condition> 
        <condition>FII/IIa inhibitors</condition> 
        <condition>FIX deficiency</condition> 
        <condition>FIX inhibitors</condition> 
        <condition>FV deficiency</condition> 
        <condition>FV inhibitors</condition> 
        <condition>FVIII deficiency</condition> 
        <condition>FX deficiency</condition> 
        <condition>FX inhibitors</condition> 
        <condition>FXI deficiency</condition> 
        <condition>FXI inhibitors</condition> 
        <condition>FXII deficiency</condition> 
        <condition>FXII inhibitors</condition> 
        <condition>Heparin effect</condition> 
        <condition>Liver disease effect</condition> 
        <condition>Lupus anticoagulant</condition> 
        <condition>Monoclonal gammopathy</condition> 
        <condition>Vitamin K deficiency</condition> 
        <condition>vWD type 1</condition> 
        <condition>vWD type 2</condition> 
        <condition>vWD type 3</condition> 
        <condition>Warfarin effect</condition> 
       </conditions> 
      </value> 
      <value type="normal" val=""> 
       <conditions> 
        <condition>DIC</condition> 
        <condition>Dysfibrinogenemia</condition> 
        <condition>FVII deficiency</condition> 
        <condition>FXIII deficiency</condition> 
        <condition>FVII inhibitors</condition> 
        <condition>Liver disease effect</condition> 
        <condition>Lupus anticoagulant</condition> 
        <condition>Monoclonal gammopathy</condition> 
        <condition>Vitamin K deficiency</condition> 
        <condition>vWD type 1</condition> 
        <condition>vWD type 2</condition> 
        <condition>vWD type 3</condition> 
        <condition>Warfarin effect</condition> 
       </conditions> 
      </value> 
      <value type="decreased" val=""> 
       <conditions> 
        <condition>DIC</condition> 
       </conditions> 
      </value> 
     </values> 
    </LabTest> 
</LabTests> 

: 여기

내가 함께 일하고 있어요 XML의 등, 나는 그것이 작동 얻을 수 있어요,하지만 난 모든 자식 노드와 혼동을 조금 얻을 생각 할일은 각 LabTest 요소를 잡고, 그 요소 내에서 value 요소를 잡고 ( type의 값을 잡고) value 요소 내에서 condition 요소를 모두 잡아라. 결국

, 나는 StringLabTest 이름입니다 Map<String, HashMap<String, ArrayList<String>>하고 HashMap 같은 키에 대한 type (예 : decreased, increased 등)를 사용하고 해당위한 조건과의 ArrayList를 채우고 싶어 value 유형.

충분히 혼란스러운가요?

기본적으로 필자는 각 "가치"요소와 그 "가치"요소 아래에있는 각 "조건"요소를 사용하여 각 LabTest를 반복 실행하고 잡는 예제가 필요합니다.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 

Document doc = builder.parse("input.xml"); 

NodeList labTestList = doc.getElementsByTagName("LabTest"); 
for (int i = 0; i < labTestList.getLength(); ++i) 
{ 
    Element labTest = (Element) labTestList.item(i); 
    String labTestType = labTest.getAttribute("type"); 

    NodeList valueList = labTest.getElementsByTagName("value"); 
    for (int j = 0; j < valueList.getLength(); ++j) 
    { 
     Element value = (Element) valueList.item(j); 
     String valueType = value.getAttribute("type"); 

     NodeList conditionList = value.getElementsByTagName("condition"); 
     for (int k = 0; k < conditionList.getLength(); ++k) 
     { 
      Element condition = (Element) conditionList.item(k); 
      String conditionText = condition.getFirstChild().getNodeValue(); 
     } 
    } 
} 

답변

31

.

+0

정말 고마워요. 굉장해!! – LuxuryMode

+0

정말 고마워요 :) –

0

는 또한 구문 분석하는 동안, 노드 목록에서 XML 노드 값을 언 이스케이프의 아름다운 개념이 있습니다 : 당신이 설명 된대로 작동합니다