您好,登录后才能下订单哦!
本篇文章为大家展示了xml的四种解析方法及源代码怎么写,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
这个也是自己转载的,现在对DOM还比较熟悉,自己不要只是复制代码,可以试着去熟悉其中的一两种,以后会有用处的。
xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)
第一种:SAX解析 
SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。
测试用的xml文件:db.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE dbconfig SYSTEM "db.dtd">-->
<dbconfig>
<db type="oracle">
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:oracle</url>
<user>scott</user>
<password>tiger</password>
</db>
</dbconfig>
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE dbconfig SYSTEM "db.dtd">-->
<dbconfig>
<db type="oracle">
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:oracle</url>
<user>scott</user>
<password>tiger</password>
</db>
</dbconfig>
DTD文件db.dtd
Xml代码
<!ELEMENT dbconfig (db+)> <!ELEMENT db (driver,url,user,password)> <!ELEMENT driver (#PCDATA)> <!ELEMENT url (#PCDATA)> <!ELEMENT user (#PCDATA)> <!ELEMENT password (#PCDATA)> <!ATTLIST db type CDATA #REQUIRED> <!ELEMENT dbconfig (db+)> <!ELEMENT db (driver,url,user,password)> <!ELEMENT driver (#PCDATA)> <!ELEMENT url (#PCDATA)> <!ELEMENT user (#PCDATA)> <!ELEMENT password (#PCDATA)> <!ATTLIST db type CDATA #REQUIRED>
SAX解析实例一
org.xml.sax.DefalutHandler类:  可以扩展该类,给出自己的解析实现
SAXPrinter.java
Java代码
import java.io.File;   
  
import javax.xml.parsers.SAXParser;   
import javax.xml.parsers.SAXParserFactory;   
  
import org.xml.sax.Attributes;   
import org.xml.sax.SAXException;   
import org.xml.sax.helpers.DefaultHandler;   
  
public class SAXPrinter extends DefaultHandler   
{   
  
  /** *//**  
   * 文档开始事件  
   */  
    public void startDocument() throws SAXException   
    {   
        System.out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");   
    }   
       
  /** *//**  
   * 接收处理指令事件  
   */  
    public void processingInstruction(String target, String data) throws SAXException   
    {   
        System.out.println("<?"+target+" "+data+"?>");   
    }   
       
  /** *//**  
   * 元素开始事件  
   * 参数说明:  
   *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。  
   *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。  
   *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。  
   *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。  
   */  
    public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException   
    {   
        System.out.print("<"+qName);//输出元素名称   
        int len=attrs.getLength();//元素属性列表长度   
           
    //利用循环输出属性列表   
        for(int i=0;i<len;i++)   
        {   
            System.out.print(" ");   
            System.out.print(attrs.getQName(i));   
            System.out.print("=\"");   
            System.out.print(attrs.getValue(i));   
            System.out.print("\"");   
        }   
        System.out.print(">");   
    }   
       
  /** *//**  
   * 元素中字符数据事件:接收元素中字符数据  
   * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)  
   *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器  
   */  
    public void characters(char[] ch, int start, int length) throws SAXException   
    {   
        System.out.print(new String(ch,start,length));   
    }   
  
  /** *//**  
   * 结束元素事件  
   */  
    public void endElement(String uri, String localName, String qName) throws SAXException   
    {   
        System.out.print("</"+qName+">");   
    }   
  
    public static void main(String[] args)   
    {   
        SAXParserFactory spf=SAXParserFactory.newInstance();   
           
        try  
        {   
            SAXParser sp=spf.newSAXParser();   
            sp.parse(new File("db.xml"),new SAXPrinter());   
        }   
        catch (Exception e)   
        {   
            e.printStackTrace();   
        }   
    }   
}  
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXPrinter extends DefaultHandler
{
  /** *//**
   * 文档开始事件
   */
    public void startDocument() throws SAXException
    {
        System.out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    }
    
  /** *//**
   * 接收处理指令事件
   */
    public void processingInstruction(String target, String data) throws SAXException
    {
        System.out.println("<?"+target+" "+data+"?>");
    }
    
  /** *//**
   * 元素开始事件
   * 参数说明:
   *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
   *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
   *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
   *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。
   */
    public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException
    {
        System.out.print("<"+qName);//输出元素名称
        int len=attrs.getLength();//元素属性列表长度
        
    //利用循环输出属性列表
        for(int i=0;i<len;i++)
        {
            System.out.print(" ");
            System.out.print(attrs.getQName(i));
            System.out.print("=\"");
            System.out.print(attrs.getValue(i));
            System.out.print("\"");
        }
        System.out.print(">");
    }
    
  /** *//**
   * 元素中字符数据事件:接收元素中字符数据
   * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)
   *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器
   */
    public void characters(char[] ch, int start, int length) throws SAXException
    {
        System.out.print(new String(ch,start,length));
    }
  /** *//**
   * 结束元素事件
   */
    public void endElement(String uri, String localName, String qName) throws SAXException
    {
        System.out.print("</"+qName+">");
    }
    public static void main(String[] args)
    {
        SAXParserFactory spf=SAXParserFactory.newInstance();
        
        try
        {
            SAXParser sp=spf.newSAXParser();
            sp.parse(new File("db.xml"),new SAXPrinter());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}SAX解析实例二
org.xml.sax.ContentHandler接口: 通过实现该接口给出自己的解析实现。
org.xml.sax.ErrorHandler接口:如果SAX应用程序需要实现定制的错误处理,那么它必须实现这个接口,并调用XMLReader对象的setErrorHandler()方法向解析器注册异常处理实例,这样,解析器将通过这个接口报告所有的错误和警告。
ContentHandlerImpl.java
Java代码
import org.xml.sax.Attributes;   
import org.xml.sax.ContentHandler;   
import org.xml.sax.Locator;   
import org.xml.sax.SAXException;   
  
public class ContentHandlerImpl implements ContentHandler   
{   
  /** *//**  
   * 文档开始事件  
   */  
  public void startDocument() throws SAXException   
  {   
    System.out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");   
  }   
     
  /** *//**  
   * 接收处理指令事件  
   */  
  public void processingInstruction(String target, String data) throws SAXException   
  {   
    System.out.println("<?"+target+" "+data+"?>");   
  }   
     
  /** *//**  
   * 元素开始事件  
   * 参数说明:  
   *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。  
   *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。  
   *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。  
   *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。  
   */  
  public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException   
  {   
    System.out.print("<"+qName);//输出元素名称   
    int len=attrs.getLength();//元素属性列表长度   
       
    //利用循环输出属性列表   
    for(int i=0;i<len;i++)   
    {   
      System.out.print(" ");   
      System.out.print(attrs.getQName(i));   
      System.out.print("=\"");   
      System.out.print(attrs.getValue(i));   
      System.out.print("\"");   
    }   
    System.out.print(">");   
  }   
     
  /** *//**  
   * 元素中字符数据事件:接收元素中字符数据  
   * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)  
   *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器  
   */  
  public void characters(char[] ch, int start, int length) throws SAXException   
  {   
    System.out.print(new String(ch,start,length));   
  }   
  
  /** *//**  
   * 结束元素事件  
   */  
  public void endElement(String uri, String localName, String qName) throws SAXException   
  {   
    System.out.print("</"+qName+">");   
  }   
  
  public void endDocument() throws SAXException   
  {   
       
  }   
  
  public void endPrefixMapping(String prefix) throws SAXException   
  {   
       
  }   
  
  public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException   
  {   
       
  }   
  
  public void setDocumentLocator(Locator locator)   
  {   
       
  }   
  
  public void skippedEntity(String name) throws SAXException   
  {   
       
  }   
  
  public void startPrefixMapping(String prefix, String uri) throws SAXException   
  {   
       
  }   
  
}   
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
public class ContentHandlerImpl implements ContentHandler
{
  /** *//**
   * 文档开始事件
   */
  public void startDocument() throws SAXException
  {
    System.out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
  }
  
  /** *//**
   * 接收处理指令事件
   */
  public void processingInstruction(String target, String data) throws SAXException
  {
    System.out.println("<?"+target+" "+data+"?>");
  }
  
  /** *//**
   * 元素开始事件
   * 参数说明:
   *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
   *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
   *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
   *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。
   */
  public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException
  {
    System.out.print("<"+qName);//输出元素名称
    int len=attrs.getLength();//元素属性列表长度
    
    //利用循环输出属性列表
    for(int i=0;i<len;i++)
    {
      System.out.print(" ");
      System.out.print(attrs.getQName(i));
      System.out.print("=\"");
      System.out.print(attrs.getValue(i));
      System.out.print("\"");
    }
    System.out.print(">");
  }
  
  /** *//**
   * 元素中字符数据事件:接收元素中字符数据
   * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)
   *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器
   */
  public void characters(char[] ch, int start, int length) throws SAXException
  {
    System.out.print(new String(ch,start,length));
  }
  /** *//**
   * 结束元素事件
   */
  public void endElement(String uri, String localName, String qName) throws SAXException
  {
    System.out.print("</"+qName+">");
  }
  public void endDocument() throws SAXException
  {
    
  }
  public void endPrefixMapping(String prefix) throws SAXException
  {
    
  }
  public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException
  {
    
  }
  public void setDocumentLocator(Locator locator)
  {
    
  }
  public void skippedEntity(String name) throws SAXException
  {
    
  }
  public void startPrefixMapping(String prefix, String uri) throws SAXException
  {
    
  }
}ErrorHandlerImpl.java
Java代码
public class ErrorHandlerImpl implements ErrorHandler   
{   
  
  public void warning(SAXParseException e) throws SAXException   
  {   
    System.out.println("[Warning ]"+getLocationString(e)+":"+e.getMessage());   
  }   
  
  public void error(SAXParseException e) throws SAXException   
  {   
    System.out.println("[Error ]"+getLocationString(e)+":"+e.getMessage());   
  }   
  
  public void fatalError(SAXParseException e) throws SAXException   
  {   
    System.out.println("[Fatal Error ]"+getLocationString(e)+":"+e.getMessage());   
  }   
  
  private String getLocationString(SAXParseException e)   
  {   
    StringBuffer sb=new StringBuffer();   
    String publicId=e.getPublicId();   
    if(publicId!=null)   
    {   
      sb.append(publicId);   
      sb.append(" ");   
    }   
       
    String systemId=e.getSystemId();   
    if(systemId!=null)   
    {   
      sb.append(systemId);   
      sb.append(" ");   
    }   
       
    sb.append(e.getLineNumber());   
    sb.append(":");   
    sb.append(e.getColumnNumber());   
    return sb.toString();   
  }   
1. }  
public class ErrorHandlerImpl implements ErrorHandler
{
  public void warning(SAXParseException e) throws SAXException
  {
    System.out.println("[Warning ]"+getLocationString(e)+":"+e.getMessage());
  }
  public void error(SAXParseException e) throws SAXException
  {
    System.out.println("[Error ]"+getLocationString(e)+":"+e.getMessage());
  }
  public void fatalError(SAXParseException e) throws SAXException
  {
    System.out.println("[Fatal Error ]"+getLocationString(e)+":"+e.getMessage());
  }
  private String getLocationString(SAXParseException e)
  {
    StringBuffer sb=new StringBuffer();
    String publicId=e.getPublicId();
    if(publicId!=null)
    {
      sb.append(publicId);
      sb.append(" ");
    }
    
    String systemId=e.getSystemId();
    if(systemId!=null)
    {
      sb.append(systemId);
      sb.append(" ");
    }
    
    sb.append(e.getLineNumber());
    sb.append(":");
    sb.append(e.getColumnNumber());
    return sb.toString();
  }
}SaxParserTest.java
Java代码
import java.io.FileInputStream;   
  
import org.xml.sax.InputSource;   
import org.xml.sax.XMLReader;   
import org.xml.sax.helpers.XMLReaderFactory;   
  
public class SaxParserTest   
{   
  public static void main(String[] args)   
  {   
    try  
    {   
      XMLReader xmlReader=XMLReaderFactory.createXMLReader();   
      //关闭或打开验证   
      xmlReader.setFeature("http://xml.org/sax/features/validation",true);   
      //注册事件处理器   
      xmlReader.setContentHandler(new ContentHandlerImpl());   
      //注册异常处理器   
      xmlReader.setErrorHandler(new ErrorHandlerImpl());   
         
      xmlReader.parse(new InputSource(new FileInputStream("saxdb.xml")));   
    } catch (Exception e)   
    {   
      System.out.println(e.getMessage());   
    }   
  }   
}  
import java.io.FileInputStream;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class SaxParserTest
{
  public static void main(String[] args)
  {
    try
    {
      XMLReader xmlReader=XMLReaderFactory.createXMLReader();
      //关闭或打开验证
      xmlReader.setFeature("http://xml.org/sax/features/validation",true);
      //注册事件处理器
      xmlReader.setContentHandler(new ContentHandlerImpl());
      //注册异常处理器
      xmlReader.setErrorHandler(new ErrorHandlerImpl());
      
      xmlReader.parse(new InputSource(new FileInputStream("saxdb.xml")));
    } catch (Exception e)
    {
      System.out.println(e.getMessage());
    }
  }
}第二种:DOM解析
DOM中的核心概念就是节点。DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。在内存中,这些节点形成一课文档树。整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。
PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点
DOMPrinter.java
Java代码
import org.w3c.dom.Document;   
import org.w3c.dom.NamedNodeMap;   
import org.w3c.dom.Node;   
  
import com.sun.org.apache.xerces.internal.parsers.DOMParser;   
  
public class DOMPrinter   
{   
  public static void main(String[] args)   
  {   
    try  
    {   
      /** *//** 获取Document对象 */  
      DOMParser parser = new DOMParser();   
      parser.parse("db.xml");   
      Document document = parser.getDocument();   
      printNode(document);   
    } catch (Exception e)   
    {   
      e.printStackTrace();   
    }   
  }   
     
  public static void printNode(Node node)   
  {   
    short nodeType=node.getNodeType();   
    switch(nodeType)   
    {   
    case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型   
      printNodeInfo(node);   
      break;   
    case Node.ELEMENT_NODE://元素节点类型   
      printNodeInfo(node);   
      printAttribute(node);   
      break;   
    case Node.TEXT_NODE://文本节点类型   
      printNodeInfo(node);   
      break;   
    default:   
      break;   
    }   
       
    Node child=node.getFirstChild();   
    while(child!=null)   
    {   
      printNode(child);   
      child=child.getNextSibling();   
    }   
  }   
     
  /** *//**  
   * 根据节点类型打印节点  
   * @param node  
   */  
  public static void printNodeInfo(Node node)   
  {   
    if (node.getNodeType() == Node.ELEMENT_NODE)   
    {   
      System.out.println("NodeName: " + node.getNodeName());   
    }   
    else if (node.getNodeType() == Node.TEXT_NODE)   
    {   
      String value = node.getNodeValue().trim();   
      if (!value.equals(""))   
        System.out.println("NodeValue: " + value);   
      else  
        System.out.println();   
    }else  
    {   
      System.out.println(node.getNodeName()+" : "+node.getNodeValue());   
    }   
  }   
     
  /** *//**  
   * 打印节点属性  
   * @param aNode 节点  
   */  
  public static void printAttribute(Node aNode)   
  {   
    NamedNodeMap attrs = aNode.getAttributes();   
    if(attrs!=null)   
    {   
      for (int i = 0; i < attrs.getLength(); i++)   
      {   
        Node attNode = attrs.item(i);   
        System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");   
      }   
    }   
  }  
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import com.sun.org.apache.xerces.internal.parsers.DOMParser;
public class DOMPrinter
{
  public static void main(String[] args)
  {
    try
    {
      /** *//** 获取Document对象 */
      DOMParser parser = new DOMParser();
      parser.parse("db.xml");
      Document document = parser.getDocument();
      printNode(document);
    } catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  
  public static void printNode(Node node)
  {
    short nodeType=node.getNodeType();
    switch(nodeType)
    {
    case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型
      printNodeInfo(node);
      break;
    case Node.ELEMENT_NODE://元素节点类型
      printNodeInfo(node);
      printAttribute(node);
      break;
    case Node.TEXT_NODE://文本节点类型
      printNodeInfo(node);
      break;
    default:
      break;
    }
    
    Node child=node.getFirstChild();
    while(child!=null)
    {
      printNode(child);
      child=child.getNextSibling();
    }
  }
  
  /** *//**
   * 根据节点类型打印节点
   * @param node
   */
  public static void printNodeInfo(Node node)
  {
    if (node.getNodeType() == Node.ELEMENT_NODE)
    {
      System.out.println("NodeName: " + node.getNodeName());
    }
    else if (node.getNodeType() == Node.TEXT_NODE)
    {
      String value = node.getNodeValue().trim();
      if (!value.equals(""))
        System.out.println("NodeValue: " + value);
      else
        System.out.println();
    }else
    {
      System.out.println(node.getNodeName()+" : "+node.getNodeValue());
    }
  }
  
  /** *//**
   * 打印节点属性
   * @param aNode 节点
   */
  public static void printAttribute(Node aNode)
  {
    NamedNodeMap attrs = aNode.getAttributes();
    if(attrs!=null)
    {
      for (int i = 0; i < attrs.getLength(); i++)
      {
        Node attNode = attrs.item(i);
        System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");
      }
    }
  }DOM生成XML文档:DOMCreateExample.java
Java代码
import java.io.FileNotFoundException;   
import java.io.FileOutputStream;   
import java.io.IOException;   
  
import javax.xml.parsers.DocumentBuilder;   
import javax.xml.parsers.DocumentBuilderFactory;   
import javax.xml.parsers.ParserConfigurationException;   
  
import org.w3c.dom.Document;   
import org.w3c.dom.Element;   
  
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;   
  
public class DOMCreateExample   
{   
  public static void main(String[] args) throws ParserConfigurationException   
  {   
    //DOMImplementation domImp = DOMImplementationImpl.getDOMImplementation();   
    DocumentBuilderFactory builderFact = DocumentBuilderFactory.newInstance();   
    DocumentBuilder builder = builderFact.newDocumentBuilder();   
      
    Document doc = builder.newDocument();   
    //Document doc = domImp.createDocument(null, null, null);   
      
    Element root = doc.createElement("games");   
    Element child1 = doc.createElement("game");   
    child1.appendChild(doc.createTextNode("Final Fantasy VII"));   
    child1.setAttribute("genre", "rpg");   
    root.appendChild(child1);   
    doc.appendChild(root);   
        
     XMLSerializer serial;   
    try  
    {   
      serial = new XMLSerializer(new FileOutputStream("domcreate.xml"), null);   
      serial.serialize(doc);   
    } catch (FileNotFoundException e1)   
    {   
      e1.printStackTrace();   
    } catch (IOException e)   
    {   
      e.printStackTrace();   
    }   
  }   
}  
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
public class DOMCreateExample
{
  public static void main(String[] args) throws ParserConfigurationException
  {
    //DOMImplementation domImp = DOMImplementationImpl.getDOMImplementation();
    DocumentBuilderFactory builderFact = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = builderFact.newDocumentBuilder();
   
    Document doc = builder.newDocument();
    //Document doc = domImp.createDocument(null, null, null);
   
    Element root = doc.createElement("games");
    Element child1 = doc.createElement("game");
    child1.appendChild(doc.createTextNode("Final Fantasy VII"));
    child1.setAttribute("genre", "rpg");
    root.appendChild(child1);
    doc.appendChild(root);
     
     XMLSerializer serial;
    try
    {
      serial = new XMLSerializer(new FileOutputStream("domcreate.xml"), null);
      serial.serialize(doc);
    } catch (FileNotFoundException e1)
    {
      e1.printStackTrace();
    } catch (IOException e)
    {
      e.printStackTrace();
    }
  }
}第三种JDOM解析 
JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM简单易用。JDOM也使用对象树来表示XML文档,JDOM使用SAXj解析器来分析XML文档,构建JDOM树。然而JOMD本身并没有提供解析器,它使用其他开发商提供的标准SAX解析器,JDOM默认通过JAXP来选择解析器,可以通过手动知道解析器的类名来设置。
首先要在工程中添加jdom的jar包,这里使用jdom1.0.jar。(见附件)
JDOMConvert.java 
Java代码
import java.io.File;   
  
import org.jdom.Document;   
import org.jdom.Element;   
import org.jdom.input.SAXBuilder;   
import org.jdom.output.Format;   
import org.jdom.output.XMLOutputter;   
  
public class JDOMConvert   
{   
    public static void main(String[] args)   
    {   
        SAXBuilder saxBuilder=new SAXBuilder();   
        try  
        {   
            Document doc=saxBuilder.build(new File("domdb.xml"));   
         
      //首先创建好节点   
      Element eltDb=new Element("db");   
      Element eltDriver=new Element("driver");   
      Element eltUrl=new Element("url");   
      Element eltUser=new Element("user");   
      Element eltPassword=new Element("password");   
         
      //设置节点的值   
      eltDriver.setText("com.mysql.jdbc.Driver");   
      eltUrl.setText("jdbc:mysql://localhost/mySql");   
      eltUser.setText("root");   
      eltPassword.setText("xlc");   
         
      //添加到根节点   
      eltDb.addContent(eltDriver);   
      eltDb.addContent(eltUrl);   
      eltDb.addContent(eltUser);   
      eltDb.addContent(eltPassword);   
      //根节点设置属性   
      eltDb.setAttribute("type","mysql");   
         
      Element root=doc.getRootElement();   
      //root.removeChild("db");//删除节点   
      root.addContent(eltDb);//增加节点   
         
      //修改db节点中内容   
      root.getChild("db").getChild("user").setText("system");   
      root.getChild("db").getChild("password").setText("manager");   
         
            XMLOutputter xmlOut=new XMLOutputter();   
               
      //设置XML格式   
            Format fmt=Format.getPrettyFormat();   
            fmt.setIndent("    ");   
            fmt.setEncoding("utf-8");   
               
            xmlOut.setFormat(fmt);   
            xmlOut.output(doc,System.out);   
        }   
        catch (Exception e)   
        {   
            e.printStackTrace();   
        }   
    }   
}  
import java.io.File;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class JDOMConvert
{
    public static void main(String[] args)
    {
        SAXBuilder saxBuilder=new SAXBuilder();
        try
        {
            Document doc=saxBuilder.build(new File("domdb.xml"));
      
      //首先创建好节点
      Element eltDb=new Element("db");
      Element eltDriver=new Element("driver");
      Element eltUrl=new Element("url");
      Element eltUser=new Element("user");
      Element eltPassword=new Element("password");
      
      //设置节点的值
      eltDriver.setText("com.mysql.jdbc.Driver");
      eltUrl.setText("jdbc:mysql://localhost/mySql");
      eltUser.setText("root");
      eltPassword.setText("xlc");
      
      //添加到根节点
      eltDb.addContent(eltDriver);
      eltDb.addContent(eltUrl);
      eltDb.addContent(eltUser);
      eltDb.addContent(eltPassword);
      //根节点设置属性
      eltDb.setAttribute("type","mysql");
      
      Element root=doc.getRootElement();
      //root.removeChild("db");//删除节点
      root.addContent(eltDb);//增加节点
      
      //修改db节点中内容
      root.getChild("db").getChild("user").setText("system");
      root.getChild("db").getChild("password").setText("manager");
      
            XMLOutputter xmlOut=new XMLOutputter();
            
      //设置XML格式
            Format fmt=Format.getPrettyFormat();
            fmt.setIndent("    ");
            fmt.setEncoding("utf-8");
            
            xmlOut.setFormat(fmt);
            xmlOut.output(doc,System.out);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}JDOM生成XML文档:JDOMCreate.java
Java代码
import java.io.IOException;   
  
import org.jdom.Document;   
import org.jdom.Element;   
import org.jdom.output.XMLOutputter;   
  
public class JDOMCreate   
{   
  public static void main(String[] args)   
  {   
    Document doc = new Document(new Element("games"));   
    Element newGame = new Element("game").setText("Final Fantasy VI");   
    doc.getRootElement().addContent(newGame);   
    newGame.setAttribute("genre", "rpg");   
    XMLOutputter domstream = new XMLOutputter();   
    try  
    {   
      domstream.output(doc, System.out);   
    } catch (IOException e)   
    {   
      e.printStackTrace();   
    }   
  }   
}  
import java.io.IOException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class JDOMCreate
{
  public static void main(String[] args)
  {
    Document doc = new Document(new Element("games"));
    Element newGame = new Element("game").setText("Final Fantasy VI");
    doc.getRootElement().addContent(newGame);
    newGame.setAttribute("genre", "rpg");
    XMLOutputter domstream = new XMLOutputter();
    try
    {
      domstream.output(doc, System.out);
    } catch (IOException e)
    {
      e.printStackTrace();
    }
  }
}第四种:DOM4J解析
dom4j与JDOM一样,也是一种用于解析XML文档的开放源代码的XML框架,dom4j也应用于java平台,dom4j API使用了java集合框架并完全支持DOM、SAX和JAXP。与JDOM不同的是,dom4j使用接口和抽象类,虽然dom4j的API相对复杂些,但它提供了比JDOM更好的灵活性。dom4j也使用SAX解析器来分析XML文档,创建dom4j树。此外dom4j也可以接收DOM格式的内容,并提供了从dom4j树到SAX事件流或W3C DOM树的输出机制。与JDOM不同,dom4j自带了一个SAX解析器Aelfred2,如果没有显示的设置SAX解析器,也没有通过系统属性org.xml.sax.driver设置解析器,dom3j将会使用JAXP来加载JAXP配置的解析器,如果创建解析器失败,那么最后才使用dom4j自带的Aelfred2解析器。
同样,首先要在工程中添加dom4j的jar包,这里使用dom4j-1.6.1.jar。(见附件)
Dom4j生成XML文档db.xml:Dom4jCreate.java 
Java代码
import java.io.IOException;   
  
import org.dom4j.Document;   
import org.dom4j.DocumentHelper;   
import org.dom4j.Element;   
import org.dom4j.io.OutputFormat;   
import org.dom4j.io.XMLWriter;   
  
public class Dom4jCreate   
{   
  
  public static void main(String[] args)   
  {   
    Document doc = DocumentHelper.createDocument();   
  
    doc.addProcessingInstruction("xml-stylesheet", "type='text/xsl' href='db.xsl'");   
    doc.addDocType("dbconfig", null,"db.dtd");   
       
    //Element root=DocumentHelper.createElement("dbconfig");   
    // doc.setRootElement(root);   
    Element root = doc.addElement("dbconfig");   
  
    Element eltDb= root.addElement("db");   
    Element eltDriver = eltDb.addElement("driver");   
    Element eltUrl = eltDb.addElement("url");   
    Element eltUser = eltDb.addElement("user");   
    Element eltPassword = eltDb.addElement("password");   
       
    eltDriver.setText("com.mysql.jdbc.Driver");   
    eltUrl.setText("jdbc:mysql://localhost/mySql");   
    eltUser.setText("root");   
    eltPassword.setText("xlc");   
    eltDb.addAttribute("type","mysql");   
           
    try  
    {   
      //设置输出格式   
      OutputFormat outFmt = new OutputFormat("    ", true);   
      outFmt.setEncoding("UTF-8");   
         
      /**//*PrintWriter pw = new PrintWriter(System.out);  
      doc.write(pw);  
      pw.flush();  
      pw.close();*/  
  
      XMLWriter xmlWriter = new XMLWriter(System.out, outFmt);   
      // XMLWriter xmlWriter=new XMLWriter(new FileWriter("db.xml"),outFmt);   
      xmlWriter.write(doc);   
      xmlWriter.flush();   
      xmlWriter.close();   
    } catch (IOException e)   
    {   
      e.printStackTrace();   
    }   
  }   
}  
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Dom4jCreate
{
  public static void main(String[] args)
  {
    Document doc = DocumentHelper.createDocument();
    doc.addProcessingInstruction("xml-stylesheet", "type='text/xsl' href='db.xsl'");
    doc.addDocType("dbconfig", null,"db.dtd");
    
    //Element root=DocumentHelper.createElement("dbconfig");
    // doc.setRootElement(root);
    Element root = doc.addElement("dbconfig");
    Element eltDb= root.addElement("db");
    Element eltDriver = eltDb.addElement("driver");
    Element eltUrl = eltDb.addElement("url");
    Element eltUser = eltDb.addElement("user");
    Element eltPassword = eltDb.addElement("password");
    
    eltDriver.setText("com.mysql.jdbc.Driver");
    eltUrl.setText("jdbc:mysql://localhost/mySql");
    eltUser.setText("root");
    eltPassword.setText("xlc");
    eltDb.addAttribute("type","mysql");
        
    try
    {
      //设置输出格式
      OutputFormat outFmt = new OutputFormat("    ", true);
      outFmt.setEncoding("UTF-8");
      
      /**//*PrintWriter pw = new PrintWriter(System.out);
      doc.write(pw);
      pw.flush();
      pw.close();*/
      XMLWriter xmlWriter = new XMLWriter(System.out, outFmt);
      // XMLWriter xmlWriter=new XMLWriter(new FileWriter("db.xml"),outFmt);
      xmlWriter.write(doc);
      xmlWriter.flush();
      xmlWriter.close();
    } catch (IOException e)
    {
      e.printStackTrace();
    }
  }
}Dom4j修改XML文档db.xml:Dom4jModify.java
Java代码
import java.io.File;   
import java.io.FileWriter;   
import java.util.Iterator;   
import java.util.List;   
  
import org.dom4j.Document;   
import org.dom4j.Element;   
import org.dom4j.io.OutputFormat;   
import org.dom4j.io.SAXReader;   
import org.dom4j.io.XMLWriter;   
  
public class Dom4jModify   
{   
  public Document modifyDocument(File inputXml)   
  {   
    try  
    {   
      SAXReader saxReader = new SAXReader();   
      Document document = saxReader.read(inputXml);   
      document.addDocType("dbconfig",null,"db.dtd");   
      List list = document.content();   
  
      // Iterator iter = document.nodeIterator();   
      Iterator iter = list.iterator();   
  
      Element element = (Element) iter.next();   
      element.element("db").attribute("type").setValue("mysql");   
      element.element("db").element("url").setText("jdbc:mysql://localhost/mySql");   
      element.element("db").element("driver").setText("com.mysql.jdbc.Driver");   
      element.element("db").element("user").setText("root");   
      element.element("db").element("password").setText("xlc");   
         
      // 设置输出格式   
      OutputFormat outFmt = new OutputFormat("    ", true);   
      outFmt.setEncoding("UTF-8");   
         
      XMLWriter xmlWriter=new XMLWriter(new FileWriter("domdb-modified.xml"),outFmt);   
      xmlWriter.write(document);   
      xmlWriter.flush();   
      xmlWriter.close();   
      return document;   
    }   
    catch (Exception e)   
    {   
      System.out.println(e.getMessage());   
      return null;   
    }   
  }   
  
  public static void main(String[] args) throws Exception   
  {   
    Dom4jModify dom4jParser = new Dom4jModify();   
    Document document = dom4jParser.modifyDocument(new File("domdb.xml"));   
       
    OutputFormat outFmt = new OutputFormat("    ", true);   
    outFmt.setEncoding("UTF-8");   
    XMLWriter xmlWriter = new XMLWriter(System.out,outFmt);   
    xmlWriter.write(document);   
xmlWriter.flush();   
xmlWriter.close();   
}   
}上述内容就是xml的四种解析方法及源代码怎么写,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。