zoukankan      html  css  js  c++  java
  • 使用Dom解析xml文件

    以前,曾经解析xml文件,仅仅为了能够实现结果而解析,觉得简单。在昨天做的项目中,需要解析xml文件,发现之前并没有深入进去。静下心来,好好的看了看书,受益匪浅。下面举几个常见的例子说明一下Dom的基本用法。

    引用的xml文件(borrowed.xml):

    〈?xml version="1.0" encoding="GB2312"?>
    〈NewDataSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\sourcelist\borrowed.xsd">
     〈record>
      〈BDate>2001-06-18 00:00:00.0〈/BDate>
      〈BPieces>0〈/BPieces>
      〈DNo>00020〈/DNo>
      〈MNo>0001〈/MNo>
      〈RDate>2001-09-18 00:00:00.0〈/RDate>
      〈RNo>01     1〈/RNo>
      〈STATUS>1〈/STATUS>
     〈/record>
     〈record>
      〈BDate>2001-06-18 00:00:00.0〈/BDate>
      〈BPieces>0〈/BPieces>
      〈DNo>00053〈/DNo>
      〈MNo>0001〈/MNo>
      〈RDate>2001-09-18 00:00:00.0〈/RDate>
      〈RNo>01     2〈/RNo>
      〈STATUS>1〈/STATUS>
     〈/record>
     〈record>
      〈BDate>2001-06-18 00:00:00.0〈/BDate>
      〈BPieces>0〈/BPieces>
      〈DNo>00086〈/DNo>
      〈MNo>0004〈/MNo>
      〈RDate>2001-09-18 00:00:00.0〈/RDate>
      〈RNo>01     3〈/RNo>
      〈STATUS>1〈/STATUS>
     〈/record>
     〈record>
      〈BDate>2001-06-18 00:00:00.0〈/BDate>
      〈BPieces>0〈/BPieces>
      〈DNo>00053〈/DNo>
      〈MNo>0001〈/MNo>
      〈RDate>2001-09-18 00:00:00.0〈/RDate>
      〈RNo>01     2〈/RNo>
      〈STATUS>1〈/STATUS>
     〈/record>

    〈/NewDataSet>

    1.  获取xml文件的版本和字符格式

     /**
      * 获取xml文件的版本和字符格式
      * document.getXmlVersion()
      * document.getXmlEncoding()
      */
     public void get_versionANDencoding()
     {
      try
      {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("borrowed.xml"));
       
       String version = document.getXmlVersion();
       System.out.println("xml文件的版本为:"+version);
       String encoding = document.getXmlEncoding();
       System.out.println("xml文件的编码为:"+encoding);
      }catch (Exception e){e.printStackTrace();}  
     }
     

    2.  获取xml文件的头结点

    /**
      * 获取xml文件的头结点
      * document.getDocumentElement().getNodeName()
      */
     public void get_rootName()
     {
      try
      {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("borrowed.xml"));
       
       Element root = document.getDocumentElement();
       String rootName = root.getNodeName();
       System.out.println("xml文件根节点的名称为:"+ rootName);
      }catch(Exception e){e.printStackTrace();}
     }

    3.  获取xml文件的头结点的子节点以及子节点的相关内容

    方法一:

    /**
      * 获取xml文件的头结点的子节点以及子节点的相关内容

      * document.getElementsByTagName("record")

      * NodeList 

      * item()
      */
     public void get_root_childNameAndcontent()
     {
      try
      {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("borrowed.xml"));
         
       NodeList nodelist = document.getElementsByTagName("record");
       int size = nodelist.getLength();
       for(int i=0; i〈size; i++)
       {
        Node node = nodelist.item(i);
        String name = node.getNodeName();
        String content = node.getTextContent();
        System.out.println(name);
        System.out.println(" " + content);
       }
      }catch(Exception e){e.printStackTrace();}
     }

    方法二:

     /**
      * 获取xml文件头结点的子节点以及子节点的相关内容

      * NodeList nodelist = root.getChildNodes();

      * Element elementNode = (Element)node
      */
     public void get_root_childNameAndContent()
     {
      try
      {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("borrowed.xml"));
       
       Element root = document.getDocumentElement();
       NodeList nodelist = root.getChildNodes();
       int size = nodelist.getLength();
       System.out.println(size);
       for(int i=0; i〈size; i++)
       {
        Node node = nodelist.item(i);
        if (node.getNodeType()== Node.ELEMENT_NODE)
        {
         Element elementNode = (Element)node;
         String name = elementNode.getNodeName();
         String content = elementNode.getTextContent();
         System.out.println(name + "\n" + content);
        }
       }
      }catch(Exception e){e.printStackTrace();}
     }

    4.  获取xml文件头结点的子节点名称

    /**
      * 获取xml文件头结点的子节点名称

      * node.getNodeType()== Node.ELEMENT_NODE
      * Element elementNode = (Element)node
      */
     public void get_root_childName()
     {
      try
      {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("borrowed.xml"));
       
       Element root = document.getDocumentElement();
       NodeList nodelist = root.getChildNodes();
       int size = nodelist.getLength();
       System.out.println(size);
       for(int i=0; i〈size; i++)
       {
        Node node = nodelist.item(i);
        if (node.getNodeType()== Node.ELEMENT_NODE)
        {
         Element elementNode = (Element)node;
         String name = elementNode.getNodeName();
         System.out.println(name);
        }
       }
      }catch(Exception e){e.printStackTrace();}
     }

    5. 获取孙子节点的名称和值,生成xml格式的字符串,便于表格显示
     

     /**
      * 获取孙子节点的名称

      * 表头
      */
     public String get_root_childName_childName()
     {
      String child_childname="";
      StringBuffer nodename = new StringBuffer();
      try
      {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("borrowed.xml"));
      
       Element root = document.getDocumentElement();
       NodeList child = root.getElementsByTagName("record");
       int size = child.getLength();
       System.out.println(size);
       nodename.append("〈?xml version=\"1.0\"  encoding=\"GB2312\"?>");
       nodename.append("\n〈table border=1>");  
       Node node = child.item(1);
       if (node.getNodeType()== Node.ELEMENT_NODE)
        {     
         Element elementNode = (Element)node.getChildNodes();
         NodeList elementNodeChild = elementNode.getChildNodes();
         int size1 = elementNodeChild.getLength();
         nodename.append("\n〈tr>");
         for (int j=0; j〈size1;j++)
         {
          Node node1 = elementNodeChild.item(j);
          if (node1.getNodeType()==Node.ELEMENT_NODE)
          {
           Element elementNode1 = (Element)node1.getChildNodes();
           String name = elementNode1.getNodeName();

           nodename.append("\n  〈th>");
           nodename.append(name);
           nodename.append("〈/th>");
          }
         }
         nodename.append("\n〈/tr>");
        }
       String values=GetNodeValue(root);
       nodename.append(values);
       nodename.append("\n〈/table>");
       child_childname = nodename.toString();
      }catch(Exception e){e.printStackTrace();}
      return child_childname;
     }

    /**
      * 获取孙子节点的值

      * 表的内容
      */
     public String GetNodeValue(Element root)
     {
      String nodevalue="";
      StringBuffer nodevalues = new StringBuffer();
      NodeList child = root.getElementsByTagName("record");
      int size = child.getLength();
      System.out.println(size);

      for(int i=0; i〈size; i++)
      {
       Node node = child.item(i);
       if (node.getNodeType()== Node.ELEMENT_NODE)
       {
        Element elementNode = (Element)node.getChildNodes();
        NodeList elementNodeChild = elementNode.getChildNodes();
        int size1 = elementNodeChild.getLength();
        nodevalues.append("\n〈tr>");
        for (int j=0; j〈size1;j++)
        {
         Node node1 = elementNodeChild.item(j);
         if (node1.getNodeType()==Node.ELEMENT_NODE)
         {
          Element elementNode1 = (Element)node1.getChildNodes();
          String content = elementNode1.getTextContent();
          nodevalues.append("\n  〈td>");
          nodevalues.append(content);
          nodevalues.append("〈/td>");
         }
        }
        nodevalues.append("\n〈/tr>");
       }
      }
      nodevalue = nodevalues.toString();
      return nodevalue;
     }

  • 相关阅读:
    Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】
    Python小白学习之路(四)——第一次练习题
    Python小白学习之路(三)—【数字功能】【字符串功能】
    Python小白学习之路(二)—【Pycharm安装与配置】【创建项目】【运算符】【数据类型】
    Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】
    HTML下直接调用Less文件
    继承的几种方式
    sublime从官网纯净版到插件完整版
    bower工具的简单使用
    sublime修改代码字体颜色
  • 原文地址:https://www.cnblogs.com/shengel/p/1352448.html
Copyright © 2011-2022 走看看