2017-10-25 3 views
3

Ich analysiere einen XML-String. Ich kann nur ein Kind drucken.jsoup xml parsing - untergeordnete Knoten nicht angezeigt

Mein Code:

import java.util.List; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class RunReport { 

    public static void main(String[] args){ 
     String xmlcontent="<Results><ResultSet fetchSize=\"2\">" 
       + "<Row rowNumber=\"1\"><TBC_ID>29379155</TBC_ID><TBC_DATE>2013-01-31</TBC_DATE></Row>" 
       + "<Row rowNumber=\"2\"><TBC_ID>29379576</TBC_ID><TBC_DATE>2013-01-31</TBC_DATE></Row>"; 
     Document doc = Jsoup.parse(xmlcontent); 
     Elements rows =doc.getElementsByTag("Row"); 
     List<Element> resultSet= doc.getElementsByTag("Row"); 
     for(int i=0; i<resultSet.size();i++){ 
      Element RsRecord = resultSet.get(i); 
      Elements columns = RsRecord.children(); 
      for(Element column:columns){ 
       System.out.println("Row id:"+i+",Column Node name:"+column.nodeName()+",Value="+column.ownText()); 
      } 

     } 

    } 

Ausgang:

Row id:0,Column Node name:tbc_id,Value=29379155 
Row id:1,Column Node name:tbc_id,Value=29379576 

Tag - 'Row' hat zwei untergeordnete Knoten, aber meine Ausgabe zeigt nur ein Kind.

Erwartet:

Row id:0,Column Node name:tbc_id,Value=29379155 
Row id:0,Column Node name:tbc_date,Value=2013-01-31 
Row id:1,Column Node name:tbc_id,Value=29379576 
Row id:1,Column Node name:tbc_date,Value=2013-01-31 
+0

Schließen sonst die xml ungültig ist. – MissingSemiColon

+0

@MissingSemiColon, Danke für die Freigabe der Informationen. Ich werde diese Tags hinzufügen und meine Beobachtung hier aktualisieren. –

Antwort

1

Dies funktioniert für mich:

package test; 

import java.util.List; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class RunReport { 

public static void main(String[] args){ 
    String xmlcontent="<Results>" 
      + "<ResultSet fetchSize=\"2\">" 
      + "<data rowNumber=\"1\">" 
      + "<a>29379155</a>" 
      + "<b>2013-01-31</b>" 
      + "</data>" 
      + "<data rowNumber=\"2\">" 
      + "<a>29379576</a>" 
      + "<b>2013-01-31</b>" 
      + "</data>" 
      + "</Results>" 
      + "</ResultSet>"; 
    Document doc = Jsoup.parse(xmlcontent); 
    List<Element> resultSet = doc.getElementsByTag("data"); 
    for(int i=0; i<resultSet.size();i++){ 
     Element RsRecord = resultSet.get(i); 
     Elements columns = RsRecord.children(); 
     for(Element column:columns){ 
      System.out.println("Row id:"+i+",Column Node name:"+column.nodeName()+",Value="+column.ownText()); 
     } 

    } 

} 
} 

Meine Vermutung ist, dass Sie eine reservierte Arbeit in Ihrem XML verwenden. Wenn ich Ihren Code verwenden, dies ist die Struktur für mich gedruckt:

<row rownumber="1"> 
<tbc_id> 
    29379155 
    <tbc_date> 
    2013-01-31 
    <row rownumber="2"> 
    <tbc_id> 
    29379576 
    <tbc_date> 
     2013-01-31 
    </tbc_date> 
    </tbc_id> 
    </row> 
    </tbc_date> 
</tbc_id> 
</row> 
<row rownumber="2"> 
<tbc_id> 
    29379576 
    <tbc_date> 
    2013-01-31 
    </tbc_date> 
</tbc_id> 
</row> 
+0

Danke für die Antwort, ich kann nicht upvote, da ich diesen Fehler bekomme 'Danke für die Rückmeldung! Stimmen, die von Personen mit weniger als 15 Reputation abgegeben wurden, werden aufgezeichnet, ändern jedoch nicht den öffentlich angezeigten Post-Score. Danke trotzdem. –

+0

Keine Sorge, ich könnte helfen und ich habe auch etwas Neues gelernt. – MissingSemiColon