dom解析xml文档过程总结

来源:互联网 发布:网站推广优化平台 编辑:程序博客网 时间:2024/05/21 07:13

先得到dom解析后的文档树,和root元素.

然后递归解析,这个程序中没说明如何保存相应节点的值,如果要用hashtable数据结构保存各个节点的值,程序还得做相应调整,因为在这个递归中textvalue是在子调用中输出的,还得返回到上一层,跟父函数的节点名字对应 

 

DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();

             try {

                    DocumentBuilder dombuilder=domfac.newDocumentBuilder();

                    //InputStream is=new FileInputStream("library.xml");
      InputStream is=new FileInputStream("library.xml");

                    Document doc=dombuilder.parse(is);

                    Element root=doc.getDocumentElement();//根节点
                 }
  /*******************************************************************/
  得到root后,进行递归调用,解析xml
 
   public void digui(Node root)
   {
       if(root.getNodeType()==Node.TEXT_NODE)
       {
            //root.getNodeValue()为所要文本   
            return ;
       }
       //获得root节点对应的所有属性值
       getAttributes(root);
      
       for(Node node=root.getFirstChild();node!=null;node=node.getNextSibling())
       {//这里用这个方式比较合适,如果把textvalue拿到这里来输出,就需要判断是不是ELEMENT_NODE类型,因为

        //textvalue也是node的孩子,但它是TEXT_NODE类型的,无孩子节点

       //对于一个节点,node.getFirstChild().getNodeValue()才是这个节点的value
              digui(node);
       }
   }
   public void getAttributes(Node root)//获得root节点的所有属性值
   {
       NamedNodeMap map = root.getAttributes();//输出某个元素的属性部分
       if(map==null)
       {
         System.out.println("point null");
       }
       else
       {
            for(int i=0;i<map.getLength();i++)//输出某个元素的属性部分,这里的getLength函数得到的长度也确实是
            {                                                         //root节点所拥有的属性的个数
                   Node node = map.item(i);
                   Node nodename = map.getNamedItem("size");
                   if(node.getNodeType()==Node.ATTRIBUTE_NODE)//这个其实可以不判断,肯定是属性节点
                   {
                     if(node.getNodeName().equalsIgnoreCase("size"))
                        {
                      System.out.println("size: "+node.getNodeValue());
                     }
                     else if(node.getNodeName().equalsIgnoreCase("height"))
                     {
    System.out.println("height: "+node.getNodeValue());
                     }
                   }
            }
        }
   }