关闭

dom解析xml文档过程总结

标签: 文档xml数据结构null
953人阅读 评论(0) 收藏 举报
分类:

先得到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());
                     }
                   }
            }
        }
   } 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99119次
    • 积分:1565
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:14篇
    • 译文:0篇
    • 评论:17条
    最新评论
    格式化文件
    母校----中国科大