站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于dom读xml文件时,子节点数与实际文件中的节点数不一致的问题。多读了2个“#text”

关于dom读xml文件时,子节点数与实际文件中的节点数不一致的问题。多读了2个“#text”

摘要: 关于dom读xml文件时,子节点数与实际文件中的节点数不一致的问题。多读了2个“#text”


xml文件:myMessages.xml

<?xml version="1.0" encoding="UTF-8"?>

Good-bye serialization, hello Java!


java中用dom读myMessages.xml的代码:

import javax.xml.parsers.*;
import org.w3c.dom.*;

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("myMessages.xml");
doc.normalize();
Element myxml = doc.getDocumentElement();
System.out.println("根节点:"+myxml.getNodeName());
NodeList mymessage = myxml.getChildNodes();
System.out.println("子节点列表的长度为:" + mymessage.getLength());
for (int i = 0; i < mymessage.getLength(); i++) {
System.out.println("每个子节点的名细:" + mymessage.item(i).getNodeName());
}
String strMessage = mymessage.item(1).getChildNodes().item(0).
getNodeValue();
System.out.println("叶节点的文字内容:"+strMessage);

显示结果:

根节点:messages

子节点列表的长度为:3

每个子节点的名细:#text

每个子节点的名细:message

每个子节点的名细:#text

叶节点的文字内容:Good-bye serialization, hello Java!

xml文件明明只有一个节点,在用dom读时为何mymessage.getLength()为3呢?
而且这3个子节点中的2个“#text”是从何而来的啊!时在是不明白。




有关java用DOM读xml文件的资料可以查这个网:
http://www0.ccidnet.com/tech/guide/2001/10/08/58_3393.html
同时也可用google查关键字:java,xml,dom


2个“#text”是 Text类型的子节点,message子节点前后各有一个,DOM中把Text也当作子节点看待,如果你把XML文件变为如下:
Before
Good-bye serialization, hello Java!After


代码改为如下:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("messages.xml");
doc.normalize();
Element myxml = doc.getDocumentElement();
System.out.println("根节点:"+myxml.getNodeName());
NodeList mymessage = myxml.getChildNodes();
System.out.println("子节点列表的长度为:" + mymessage.getLength());
for (int i = 0; i < mymessage.getLength(); i++) {
Node node = mymessage.item(i);
System.out.println("每个子节点的名细:" + node.getNodeName()+"/t"+node.getNodeValue());
}
String strMessage = mymessage.item(1).getChildNodes().item(0).
getNodeValue();
System.out.println("叶节点的文字内容:"+strMessage);

则输出变为:
根节点:messages
子节点列表的长度为:3
每个子节点的名细:#textBefore

每个子节点的名细:messagenull
每个子节点的名细:#textAfter

叶节点的文字内容:Good-bye serialization, hello Java!



to:Chinajash()

你这里说的“DOM中把Text也当作子节点看待”这个“Text”指的是xml文件:
Before
Good-bye serialization, hello Java!After

的那一部分啊。除了“Before”是你后来加进去的,没有“Before”的话,就没有Text啊!怎么会有“#text”节点呢?


To zzmdegm:
之间有一个text类型的子节点,在上面的XML文档里是指"Before";之间也有一个text类型的子节点,在上面的XML文档里是指"After". 即使 或 没有任何文本内容,DOM 也会视其为text类型的子节点,只是该子节点的值为Null


↑返回目录
前一篇: href="#"之中“#”代表什么意思?
后一篇: java.lang.String最多能存储多长的字符串?