2016-05-25 4 views
-1

Dieser Code retured nur ein "Frage" Tag-Element, aber ich habe noch 9 Frage-Element in der XML-Datei.Was ist das Falsche hier drin? Muss ich loop.Weil ich überprüft die Schleife, es Schleifen nur einmal.Was ist das Problem? Ich bin herauszufinden.java dom parser bekommt nur die erste Entität

Hier ist meine xml:

<Results> 
    <question> 
    <eno>3</eno> 
    <qno>1</qno> 
    <qtext>The Battle of Gettysburg was fought during which war?</qtext> 
    <correctAnswer>C</correctAnswer> 
    </question> 
    <question> 
    <eno>3</eno> 
    <qno>2</qno> 
    <qtext>Neil Armstrong and Buzz Aldrin walked how many 
minutes on the moon in 1696?</qtext> 
    <correctAnswer>B</correctAnswer> 
    </question> 
</Results> 

mein Quellcode:

NodeList listOfQuestions = doc.getElementsByTagName("question"); 
for(int s=0; s<listOfQuestions.getLength(); s++) 
     { 
      System.out.println(listOfQuestions.getLength()); 
      Node firstQuestionNode = listOfQuestions.item(0); 
      if(firstQuestionNode.getNodeType() == Node.ELEMENT_NODE){ 
       Element firstQElement = (Element)firstQuestionNode; 

       NodeList enoList = firstQElement.getElementsByTagName("eno"); 
       Element enoElement =(Element)enoList.item(s); 
       NodeList enosList = enoElement.getChildNodes(); 
       String eno=((Node)enosList.item(s)).getNodeValue().trim(); 
       System.out.println(eno); 

       NodeList qnoList = firstQElement.getElementsByTagName("qno"); 
       Element qnoElement =(Element)qnoList.item(s); 
       NodeList qnosList = qnoElement.getChildNodes(); 
       String qno= ((Node)qnosList.item(s)).getNodeValue().trim(); 
       System.out.println(qno); 

       NodeList qtextList = firstQElement.getElementsByTagName("qtext"); 
       Element qtextElement =(Element)qtextList.item(s); 
       NodeList qtextsList = qtextElement.getChildNodes(); 
       String qtext= ((Node)qtextsList.item(s)).getNodeValue().trim(); 
       System.out.println(qtext); 

       NodeList correctAnswerList = firstQElement.getElementsByTagName("correctAnswer"); 
       Element correctAnswerElement =(Element)correctAnswerList.item(s); 
       NodeList correctAnswerElementList = correctAnswerElement.getChildNodes(); 
       String correctAnswer= ((Node)correctAnswerElementList.item(s)).getNodeValue().trim(); 
       System.out.println(correctAnswer); 

       int i=st.executeUpdate("insert into question(eno,qno,qtext,correctAnswer) values('"+eno+"','"+qno+"','"+qtext+"','"+correctAnswer+"')"); 
       System.out.println("s is"+s); 
      } 
     } 

Antwort

0

Sie fest einprogrammiert haben

Node firstQuestionNode = listOfQuestions.item(0); 
              ^^^ 

Ich glaube, Sie die Variable s dort verwenden gemeint ... oder vielleicht nicht, es ist schwer zu sagen, was Sie zu tun versuchen. Unabhängig davon gibt es keine weiteren Verweise auf listOfQuestions und Sie rufen nie einen Knoten außer dem ersten Knoten ab.

0

Sie sollten einen Blick auf jsoup werfen, es ist eine API speziell zum Parsen von HTML-DOM-Code in Java und hat Tonnen von zusätzlichen Funktionen. Was Sie gerade versuchen zu extrahieren, wäre nicht mehr als nur 3-4 LOC mit den API-Komponenten.

Blick auf ihrem Beispiel auf ihrer Website zur Verbindung mit einer URL und Abrufen von DOM-Elementen ist nur 2 LOC:

Document doc = Jsoup.connect("http://en.wikipedia.org/").get(); 
Elements newsHeadlines = doc.select("#mp-itn b a");