2011-07-07 6 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(例えば decreasedincreasedなど)を使用していますし、そのための条件とのArrayListをいっぱいにしたいです valueタイプ。

十分に混乱していませんか?

基本的には、各「値」要素と各「値」要素の下にある各「条件」要素を使用して各LabTestをループスルーして取得する例が必要です。あなたが説明するように動作するはず

答えて

31

:解析中

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(); 
     } 
    } 
} 
+0

ありがとうございます。これは素晴らしいです!! – LuxuryMode

+0

ありがとうございます:) –

0

はまた、ノードリストにXMLノード値をアンエスケープの美しい概念があることに注意してください。