使用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;
 }

posted on 2008-12-11 09:27  shengel  阅读(2171)  评论(1编辑  收藏  举报