兄弟姐妹们求解释:
    public List<Student> ParseStu()
    {
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        List<Student> students = new ArrayList<Student>();
        try
        {
            //建立解释器 
            DocumentBuilder parser = dbfactory.newDocumentBuilder();
            //解释xml文档 
            Document xmldoc = parser.parse(new File("Student.xml"));
            //取得所有以TestItem命名的节点 
            Element root = xmldoc.getDocumentElement();//得到文档对象树。
            NodeList nlist = root.getElementsByTagName("stutent");
            Node node;
            Element ele;
            for (int i = 0; i < nlist.getLength(); i++)
            {
                Student student = new Student();
                node = nlist.item(i);
                ele = (Element)node;
                student.setName(ele.getAttribute("name"));
                NodeList stus = node.getChildNodes();
                System.out.println(stus.getLength());
             }
     }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return students;
xml::
<?xml version="1.0" encoding="UTF-8"?>
<stutents>
<stutent name="程光">
<city>南京</city>
<score>245</score>
</stutent>
<stutent name="郑阳">
<city>南京</city>
<score>276</score>
</stutent>
<stutent name="李华">
<city>南京</city>
<score>300</score>
</stutent>
<stutent name="武成">
<city>广州</city>
<score>288</score>
</stutent>
<stutent name="刘昕">
<city>南京</city>
<score>280</score>
</stutent>
<stutent name="赵青">
<city>南京</city>
<score>273</score>
</stutent>
<stutent name="庄则">
<city>长沙</city>
<score>284</score>
</stutent>
</stutents>为什么输出System.out.println(stus.getLength());为5呢?

解决方案 »

  1.   

    <stutent name="武成">
    <city>广州</city>
    <score>288</score>
    </stutent>
            <stutent></stutent>中间不是只有2个节点吗?怎么会是5个呢?
      

  2.   

    System.out.println(nlist.size());
    输出等于多少?其实这个问题 你打断点 一步一步调  应该能查出来问题出在哪了?
      

  3.   

    1,先搞明白怎样是活的节点 怎样是获得子节点 怎样是活的属性
    2,然后断点跟踪,无非就是那几个变量,一个xml文件!
    good luck!
      

  4.   

    NodeList stus = node.getChildNodes();
    stus.getLength()
    各种空白、回车都算是子节点的一部分,所以这里会比你想象中的多。你需要遍历一次才知道Element节点的数量
      

  5.   

    用dom4j解析吧。那个简单一点...
      

  6.   

    Nodelist中没有size();只有getLength()还有我要是遍历(stus);
    for (int j = 0; j < stus.getLength(); j++)
                    {
                        Node nn = stus.item(j);
                        Node initW = nn.getLastChild();                  
                        System.out.println(initW.getNodeName());                }结果是:
    #text
    city
    #text
    score
    #text虽然可通过过滤条件可以得到想要的结果,
    我只是想知道明明是2个子节点,为什么是5个子节点。
      

  7.   

    首先,在<stutent name="武成">和<city>广州</city>之间有一个文本元素不过是空值,然后<city>广州</city>是一个,在<city>广州</city>和<score>288</score>之间也是一个文本元素不过也是空值,
    <score>288</score>是一个元素,在<score>288</score>和</stutent>之间也有一个文本元素(空值),所以总共是5个。xml种换行符,空白符,制表符都算文本元素。
      

  8.   


    NND,你就那么懒吗? 打印出来看啊。
      

  9.   

    #text
    city
    #text
    score
    #text
      

  10.   

    xml中换行符,空白符,制表符都算文本元素,所以要自己判断。