2016-11-10 8 views
0

Ich habe einige Probleme mit dem, was einfache DOM-Parsing sein sollte. Ich habe viele Fragen geprüft und bisher hat mir nichts geholfen. Das Problem besteht darin, dass ich einige bedingte Knoten habe, die in einer XML-Datei vorkommen können oder nicht angezeigt werden. Das von mir erstellte Tool muss den Inhalt dieser Werte in ArrayLists speichern, damit sie später verwendet werden können. Hier ist die XML in Frage:Bedingtes Java-Parsing - Untergeordneten Knoten finden Inhalt

-<Dbtr> 

    -<PstlAdr> 

     <AdrLine>111 Arlington Ave</AdrLine> 

     <AdrLine>Apartment A</AdrLine> 

     <AdrLine>Augusta, AZ 11100</AdrLine> 

    </PstlAdr> 

</Dbtr> 

Insbesondere der DBTR Tag beliebig oft in einem XML erscheinen. Für jedes Dbtr-Tag kann es zwischen 1-4 AdrLine-Kindern geben. Ich muss in der Lage sein, den Wert jedes AdrLine zu speichern, und wenn es keinen Wert gibt, dann speichere einen leeren "" -Wert in die Array-Liste für jeden AdrLine.

Um dies zu tun, schrieb ich den folgenden Code:

NodeList Dbtr = doc.getElementsByTagName("Dbtr"); 
     for(int i = 0; i < Dbtr.getLength(); i++){ 

      NodeList DbtrChildren = Dbtr.item(i).getChildNodes(); 
      if(DbtrChildren.getLength()==1){ 
      //Add the first child. 
      }else if(DbtrChildren.getLength()==2){ 
      //Add the first & second child. 
      }else if(DbtrChildren.getLength()==3){ 
      System.out.println("Test Flag"); 
      System.out.println(DbtrChildren.item(0).getNodeValue()+"Node Value"); 
      System.out.println(DbtrChildren.item(0).getAttributes()+"Text Attributes"); 
      System.out.println(DbtrChildren.item(0).getTextContent()+"Text Content"); 
      }else if(DbtrChildren.getLength()==4){ 
      //Add all 4 children. 
      } 

     } 

Also je nach der Anzahl der Kinder AdrLine Knoten die Werte werden entweder in eine Array-Liste oder auch ein Leerwert gespeichert werden gespeichert werden.

Das Problem ist, dass egal, was ich tue ich leere Werte für die Kinder. Ich kann während des Tests deutlich sehen, dass das Dbtr-Tag tatsächlich 3 Kinder hat. Wie Sie sehen können, habe ich versucht, etwas zu debuggen, um einen Weg zu finden, die Werte zu erhalten. Siehe Ergebnisse unten:

So bekomme ich eine große Menge an Leerzeichen, aber keinen Wert. Natürlich dachte ich, dass es vielleicht tatsächlich "PstlAdr" aufgenommen hat, aber warum sollte es dann erfolgreich 3 Kindknoten erkennen?

Jede Hilfe wird sehr geschätzt.

Antwort

0

Ich fand die Lösung für mein Problem.

Im obigen Beispiel bekam ich für die Länge von DbtrChildren "3" zurück, was mich zu der Annahme brachte, dass die drei Kinderelemente die Adrline-Tags waren.

In Wirklichkeit waren die drei Kinder #text, pstladr und #text (der #text repräsentiert anscheinend das/n).

Also habe ich versucht, Werte von einem Tag ohne Werte zu erhalten. Sobald ich

versuchte
for(int i = 0; i < Dbtr.getLength(); i++){ 

       NodeList Dbtr2 = Dbtr.item(i).getChildNodes(); 

       Node Dbtr3 = Dbtr2.item(1); 

       System.out.println(Dbtr3.getNodeName()); 


       } 

bekam ich zurück „Pstladr“ als das Ergebnis so dass ich jetzt weiß, ich brauche nur noch weiter in „Pstladr“ zu meinem Problem zu beheben.

Verwandte Themen