兄弟姐妹们求解释:
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呢?
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呢?
<city>广州</city>
<score>288</score>
</stutent>
<stutent></stutent>中间不是只有2个节点吗?怎么会是5个呢?
输出等于多少?其实这个问题 你打断点 一步一步调 应该能查出来问题出在哪了?
2,然后断点跟踪,无非就是那几个变量,一个xml文件!
good luck!
stus.getLength()
各种空白、回车都算是子节点的一部分,所以这里会比你想象中的多。你需要遍历一次才知道Element节点的数量
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个子节点。
<score>288</score>是一个元素,在<score>288</score>和</stutent>之间也有一个文本元素(空值),所以总共是5个。xml种换行符,空白符,制表符都算文本元素。
NND,你就那么懒吗? 打印出来看啊。
city
#text
score
#text