2011-07-07 14 views
8

Dom ve DocumentBuilder ile xml'yi ayrıştırma konusunda biraz sorun yaşıyorum. Ben çalıştığım şeyNodeList ve DocumentBuilder ile Xml ayrıştırma

<?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> 

: Burada

Ben ile çalışıyorum XML var vs, bunu çalışma almanız mümkün değilim, ama ben tüm alt düğümler ile karıştırılmamalıdır biraz olsun tahmin her LabTest öğesinin tutucusunu ele geçirip bu öğelerin her birinin içinde value öğelerini tutun (ve type değerini yakalayın) ve value öğesinin içinde condition öğelerinin tümünü tutun. Sonunda

, ben String LabTest adıdır bir Map<String, HashMap<String, ArrayList<String>> ve HashMap gibi bir şey anahtarı için type (örn decreased, increased, vs) kullanır ve sonra bunun için şartlara ArrayList doldurur istiyorum value türü.

Kafa karıştırıcı yeterli mi?

Temel olarak, her bir LabTest'i "değer" öğeleriyle ve bu "değer" öğeleri altındaki "koşul" öğelerinin her birini kullanarak nasıl döngü yapılacağına ve kapılacağına dair bir örneğe ihtiyacım var.

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

cevap

31

.

+0

Çok teşekkür ederim. Bu fantastik!! – LuxuryMode

+0

Çok teşekkür ederim :) –

0

Ayrıca ayrıştırılırken, nodelist XML düğümü değerleri atlanmaması, güzel bir kavram olduğunu not: açıklandığı gibi çalışması gerektiğini