当前页面: 开发资料首页 → 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