xml文件:myMessages.xml<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message>Good-bye serialization, hello Java!</message>
</messages>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文件明明只有一个<messages>节点,在用dom读时为何mymessage.getLength()为3呢?
而且这3个子节点中的2个“#text”是从何而来的啊!时在是不明白。

解决方案 »

  1.   

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

  2.   

    2个“#text”是 Text类型的子节点,message子节点前后各有一个,DOM中把Text也当作子节点看待,如果你把XML文件变为如下:
    <messages>Before
        <message>Good-bye serialization, hello Java!</message>After
    </messages>代码改为如下:
    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
    每个子节点的名细:#text Before
        
    每个子节点的名细:message null
    每个子节点的名细:#text After叶节点的文字内容:Good-bye serialization, hello Java!
      

  3.   

    to:Chinajash() 你这里说的“DOM中把Text也当作子节点看待”这个“Text”指的是xml文件:
    <messages>Before
        <message>Good-bye serialization, hello Java!</message>After
    </messages>
    的那一部分啊。除了“Before”是你后来加进去的,没有“Before”的话,就没有Text啊!怎么会有“#text”节点呢?
      

  4.   

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

  5.   

    每一行的回车空白部分都作为#text你试试都放到一行,就是你想要的结果了!