briarc(拥有六分仪的航海士) ,yyjzsl(阿木)两位仁兄,你们说上面那个xml文件根结点下有几个子结点啊!!

解决方案 »

  1.   

    LZ真是晕,也没说明是哪种解析器,也没有看到import,谁知道你这些API是哪个解析器的啊,还要去查。搞什么哦。建议用JDOM吧,不会上面的烦恼。
      

  2.   

    xml文件就是上面那个,程序如下:
    package com.dom;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import java.io.File;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.w3c.*;
    public class OrderProcessor {

        private static void stepThrough(Node start)
        {       System.out.println(start.getNodeName()+" = "+start.getNodeValue()); 
           
    /*通过将节点的 nodeType 与常量 ELEMENT_NODE 作比较,从而确定它是否为一个元素。 
      Node 对象带有成员常量,它们表示每种类型的节点,比如 ELEMENT_NODE 或 ATTRIBUTE_NODE。 
      如果 nodeType 与 ELEMENT_NODE 匹配,它就是一个元素。
      对于找到的每个元素,应用程序都会创建一个包含该元素的所有属性的 NamedNodeMap。
      应用程序能够迭代 NamedNodeMap,打印每个属性的名称和值,就像它迭代 NodeList 一样。
    */
           if (start.getNodeType() == start.ELEMENT_NODE) 
           {   
               NamedNodeMap startAttr = start.getAttributes();
               for (int i = 0;  i < startAttr.getLength();i++) {
                  Node attr = startAttr.item(i);
                  System.out.println("  Attribute:  "+ attr.getNodeName()
                                               +" = "+attr.getNodeValue());
               }   
           } 
           
    //     for 循环首先从根元素的第一个孩子开始。 应用程序迭代第一个孩子的所有兄弟,直至已全部对它们求值
       
           for (Node child = start.getFirstChild(); 
               child != null;
               child = child.getNextSibling())
           {
                 stepThrough(child);       }
        } public static void main(String[] args) {
    File docFile = new File("h://orders.xml");
          Document doc = null;      
          try {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      // 这句话dbf.setIgnoringElementContentWhitespace(true);怎么没起作用?        dbf.setIgnoringElementContentWhitespace(true);
           DocumentBuilder db = dbf.newDocumentBuilder();
        
           doc = db.parse(docFile);
           //      STEP 1:  Get the root element        Element root = doc.getDocumentElement();
           System.out.println("The root element is " + root.getNodeName());
           
    //      STEP 2:  Get the children
           NodeList children = root.getChildNodes();
           System.out.println("There are "+children.getLength()
                                          +" nodes in this document.");
           
           //   STEP 4:  Recurse this functionality(递归)
           stepThrough(root);
                    
           
          } catch (Exception e) {
             System.out.print("Problem parsing the file: "+e.getMessage());
          } 


    }
    }The root element is orders
    There are 5 nodes in this document.
    orders = null
    #text = order = null
    #text = 
          
    customerid = null
      Attribute:  limit = 1000
    #text = 12341
    #text = 
          
    status = null
    #text = pending
    #text = 
          
    item = null
      Attribute:  instock = Y
      Attribute:  itemid = SA15
    #text = 
             
    name = null
    #text = Silver Show Saddle, 16 inch
    #text = 
             
    price = null
    #text = 825.00
    #text = 
             
    qty = null
    #text = 1
    #text = 
          
    #text = 
          
    item = null
      Attribute:  instock = N
      Attribute:  itemid = C49
    #text = 
             
    name = null
    #text = Premium Cinch
    #text = 
             
    price = null
    #text = 49.00
    #text = 
             
    qty = null
    #text = 1
    #text = 
          
    #text = 
       
    #text = 
       
    order = null
    #text = 
          
    customerid = null
      Attribute:  limit = 150
    #text = 251222
    #text = 
          
    status = null
    #text = pending
    #text = 
          
    item = null
      Attribute:  instock = Y
      Attribute:  itemid = WB78
    #text = 
             
    name = null
    #text = Winter Blanket (78 inch)
    #text = 
             
    price = null
    #text = 20
    #text = 
             
    qty = null
    #text = 10
    #text = 
          
    #text = 
       
    #text =    
      

  3.   

    用dom 解析 xml 文件 你丢失了一句话:       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
           DocumentBuilder db = dbf.newDocumentBuilder().;
        
           Document doc = db.parse(docFile);  // docFile is a Xml File
           
           doc.normalize();  //就是这句话了。     
      

  4.   

    doc.normalize();这句话我加上了,可是还是没去掉空白结点!!!程序输出和上面是一样的,根结点下还是有五个子结点!!!!!
      

  5.   

    to success_dream(程序人生) NodeList children = root.getChildNodes(); //怎么会用这种方法呢???????应该用  NodeList children = root.getElementByTagName("order"); !!!!
    另外,success_dream(程序人生) success_dream(程序人生) 
    doc.normalize(); 这句话一定要加上!!!!
      

  6.   

    你用 root.getChildNodes(); 么当然把空白结点也算进去了咯。
      

  7.   

    用  NodeList children = root.getElementByTagName("order"); 肯定是不算空白的了,我问的是dbf.setIgnoringElementContentWhitespace(true)就是忽略空白结点的意思;怎么没起作用?
    我先用dbf.setIgnoringElementContentWhitespace(true)就已经忽略了空白结点了,然后在用
    root.getChildNodes()计算的结点已经不含有空白结点了啊!!
      

  8.   

    我这个xml 比较小,只有一种标签名order ,如果遇到跟结点下有几十个标签名的xml文件,难道你要写几十句类似 NodeList children = root.getElementByTagName("order"); 这样的话,然后你还要把各个标签名的个数相加!!你这样做不是很麻烦???我的意思是说:
    1)dbf.setIgnoringElementContentWhitespace(true)就已经忽略了空白结点了
    2)root.getChildNodes()计算的结点已经不含有空白结点了
    这样做不是很好吗?
      

  9.   

    你的萜子的标题是<<计算xml文档的结点数时怎样忽略掉空白结点>>一会儿又说 "我问的是dbf.setIgnoringElementContentWhitespace(true)就是忽略空白结点的意思;怎么没起作用?"呵呵..
      

  10.   

    楼上的有点强词夺理。
    to 楼主,为什么不用JDOM呢?JDOM不会出现这个问题啊。
      

  11.   

    哀叹一声,堂堂csdn竟然没人能解决这么基本的问题。用SAX来解析不就完了吗?? startElement(String nameSpaceURI,String sName,String qName,Attribute attrs) 方法中判断以下不就完了吗?if("".equals(sName)) 忽略....
    to cds27(http://blog.csdn.net/cds27/) 你叫人家用什么什么什么 jdom ,不要误人子弟了吧
    首先jdom 不是标准,就算要用也用dom4j,人家楼主要用sun 的 jaxp 有什么错啊。
      

  12.   

    lousidao(龟三大色郎)大哥,你试下dbf.setIgnoringElementContentWhitespace(true)这个方法看看怎样,我看书上说这个方法就是忽略空白的,可是我用怎么不行啊!谢谢拉!
      

  13.   

    你那个XML文档里没有一个空白节点,
    你看的那本书是什么呀,书也有说错的时候。
    你是要什么效果,说清楚点啊
      

  14.   

    我的xm文档在上面,程序输出也在上面,我想输出是
    The root element is orders
    There are 2 nodes in this docume
    因为跟结点orders下如果忽略空白结点的话只有两个子结点(order和order),忽略子结点的语句该怎么写呢/?如果不忽略的话就有5个子结点了!dbf.setIgnoringElementContentWhitespace(true)怎么不行?
      

  15.   

    Camjian(剑星) ,可否用程序说话?把程序列出来可以吗?
      

  16.   

    怎么没人回帖啊!csdn里有人知道吗?郁闷啊!
      

  17.   

    用节点的getNodeType()方法得到节点的类型,空白类型的是Node.TEXT_NODE,节点类型的是Node.ELEMENT_NODE,这样用if判断一下就可以得到你想要的节点了