【问题标题】:java dom parser only gets the first entityjava dom解析器只获取第一个实体
【发布时间】:2016-05-25 07:35:19
【问题描述】:

这段代码只返回一个“问题”标签的元素,但我在 xml 文件中有另外 9 个问题元素。这里有什么问题?我需要循环吗。因为当我检查循环时,它只循环一个时间。有什么问题?我想通了。

这是我的 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>

我的源代码:

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

【问题讨论】:

    标签: java dom xml-parsing


    【解决方案1】:

    你已经硬编码了

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

    我认为您的意思是在那里使用变量s...也许不是,很难说出您要做什么。无论如何,没有其他对 listOfQuestions 的引用,并且除了第一个节点之外,您永远不会检索任何节点。

    【讨论】:

      【解决方案2】:

      你应该看看jsoup,它是一个专门为解析Java 中的HTML DOM 代码而构建的API,并且有很多额外的功能。此外,您当前尝试提取的内容不会超过使用 API 组件的 3-4 LOC。

      在他们的网站上查看他们连接到 URL 的示例,获取 DOM 元素只需 2 LOC:

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

      【讨论】:

        猜你喜欢
        • 2014-05-03
        • 1970-01-01
        • 2021-05-24
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        相关资源
        最近更新 更多