`

java操作XML文件 dom 篇

阅读更多

我们需要引入的包:

import java.io.*;
import javax.xml.transform.*;    
import javax.xml.transform.dom.DOMSource;    
import javax.xml.transform.stream.StreamResult;        
import javax.xml.parsers.*;    
import org.w3c.dom.*;
import org.xml.sax.InputSource;

1、XML文件的内容转化为String

   /**
     * doc2String
     * xml文档内容转为String
     * @return 字符串
     * @param document
     */

   public static String doc2String(Document document)
    {
      String s = "";
      try
       {
           TransformerFactory tFactory = TransformerFactory.newInstance();    
           Transformer transformer = tFactory.newTransformer();
          /** 使用GB2312编码 */
          //transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
           Source source = new DOMSource( document );             
          /** 直接输出到控制台 */
          //Result output = new StreamResult( System.out );          
           StringWriter out = new StringWriter();  
           Result output = new StreamResult( out );
           transformer.transform( source, output );
           out.flush();
           s = out.toString();
       }catch(Exception ex)
       {             
           ex.printStackTrace();
       }       
      return s;
    }

2、符合XML格式的String 转化为XML Document

   /**
     * string2Document
     * 字符串转为Document
     * @return  
     * @param s xml格式的字符串
     */

   public static Document string2Document(String s)
    {
       Document document = null;
      try
       {
           DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
           document = parser.parse( new InputSource(new StringReader(s)) );
       }catch(Exception ex)
       {             
            ex.printStackTrace();
       }
      return document;
    }

3、Document对象保存为一个xml文件到本地

   /**
     * doc2XmlFile
     * Document对象保存为一个xml文件到本地
     * @return true:保存成功   flase:失败
     * @param filename 保存的文件名
     * @param document 需要保存的document对象
     */

   public static boolean doc2XmlFile(Document document,String filename)
    {
      boolean flag = true;
      try
       {
            /** document中的内容写入文件中   */
             TransformerFactory tFactory = TransformerFactory.newInstance();    
             Transformer transformer = tFactory.newTransformer();  
            /** 编码 */
            //transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
             DOMSource source = new DOMSource(document);  
             StreamResult result = new StreamResult(new File(filename));    
             transformer.transform(source, result);  
         }catch(Exception ex)
         {
             flag = false;
             ex.printStackTrace();
         }
        return flag;       
    }

4、xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败

   /**
     * string2XmlFile
     * xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败
     * @return true:保存成功   flase:失败
     * @param filename 保存的文件名
     * @param str 需要保存的字符串
     */

   public static boolean string2XmlFile(String str,String filename)
    {
      boolean flag = true;
      /* 以下格式生成的文件是以UTF-8为格式 */
      try
       {
          Document doc = string2Document(str);        
          flag = doc2XmlFile(doc,filename);
       }catch (Exception ex)
       {
          flag = false;
          ex.printStackTrace();
       }
      /** 以下不通过xml格式验证,象生成普通文件格式的方法生成xml文件
         OutputStream os = null;        
         try {
                 os = new FileOutputStream(filename);
                 os.write(str.getBytes());
                 os.flush();
         } catch (Exception ex) {
                 flag = false;
                 ex.printStackTrace();
         }finally
         {      
               try{  
                 if (os!=null) os.close();
               }catch (Exception ex) {
                 ex.printStackTrace();
               }               
         }
          */

      return flag;
    }

5、载入一个xml文档

   /**
     * load
     * 载入一个xml文档
     * @return 成功返回Document对象,失败返回null
     * @param uri 文件路径
     */

   public static Document load(String filename)
    {
       Document document = null;
      try  
       {  
            DocumentBuilderFactory   factory = DocumentBuilderFactory.newInstance();    
            DocumentBuilder builder=factory.newDocumentBuilder();    
            document=builder.parse(new File(filename));    
            document.normalize();
       }
      catch (Exception ex){
           ex.printStackTrace();
       }   
      return document;
    }

6、演示String保存为xml文件

   /**
     * xmlWriteDemoByString
     * 演示String保存为xml文件
     */

   public void xmlWriteDemoByString()
    {
      String s = "";
      /** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写*/
       s = "<?xml version='1.0' encoding='GB2312'?>"
          +"<config>\r\n"
          +"    <ftp name='DongDian'>\r\n"
          +"      <ftp-host>127.0.0.1</ftp-host>\r\n"
          +"      <ftp-port>21</ftp-port>\r\n"
          +"      <ftp-user>cxl</ftp-user>\r\n"
          +"      <ftp-pwd>longshine</ftp-pwd>\r\n"
          +"      <!-- ftp最多尝试连接次数 -->\r\n"
          +"      <ftp-try>50</ftp-try>\r\n"
          +"      <!-- ftp尝试连接延迟时间 -->\r\n"
          +"      <ftp-delay>10</ftp-delay>\r\n"
          +"      <ftp-chn>中文</ftp-chn>\r\n"
          +"   </ftp>\r\n"
          +"</config>\r\n";
      //文件生成到classes文件夹所在的目录里    
       string2XmlFile(s,"xmlWriteDemoByString.xml");    
      //文件生成到classes文件夹里    
       string2XmlFile(s,"classes/xmlWriteDemoByString.xml");   
    }

7、演示手动创建一个Document,并保存为XML文件

   /**
     * 演示手动创建一个Document,并保存为XML文件
     */

   public void xmlWriteDemoByDocument()
    {
        /** 建立document对象 */
        try  
         {  
            DocumentBuilderFactory   factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document document = builder.newDocument();
           /** 建立config根节点 */
            Element configElement = document.createElement("config");
            document.appendChild( configElement );
           /** 建立ftp节点 */
            Comment cmt = document.createComment("东电ftp配置");         
            configElement.appendChild(cmt);         
        
            Element ftpElement = document.createElement("ftp");
            configElement.appendChild(ftpElement);
            ftpElement.setAttribute("name","DongDian");
           /** ftp 属性配置 */
            Element element = document.createElement("ftp-host");
            element.appendChild(document.createTextNode( "127.0.0.1" ));
            ftpElement.appendChild(element);
            
            element = document.createElement("ftp-port");
            element.appendChild(document.createTextNode( "21" ));
            ftpElement.appendChild(element);
            
            element = document.createElement("ftp-user");
            element.appendChild(document.createTextNode( "cxl" ));
            ftpElement.appendChild(element);
            
            element = document.createElement("ftp-pwd");
            element.appendChild(document.createTextNode( "longshine" ));
            ftpElement.appendChild(element);
            
            element = document.createElement("ftp-try");
            element.appendChild(document.createTextNode( "50" ));
            ftpElement.appendChild(element);
            
            element = document.createElement("ftp-chn");
            element.appendChild(document.createTextNode( "中文" ));
            ftpElement.appendChild(element);
            
           /** 保存Document */
            doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml");
       }
      catch (Exception ex){
           ex.printStackTrace();
       }        
    }

8、演示读取文件的具体某个节点的值

   /**
     *   演示读取文件的具体某个节点的值  
     */

   public static void xmlReadDemo()
    {
       Document document = load("classes/xmlWriteDemoByDocument.xml");
       Node root=document.getDocumentElement();
      /** 如果root有子元素 */
      if(root.hasChildNodes())
       {
         /** ftpnodes */
          NodeList ftpnodes = root.getChildNodes();
         /** 循环取得ftp所有节点 */
         for (int i=0;i<ftpnodes.getLength();i++)
          {
             NodeList ftplist = ftpnodes.item(i).getChildNodes();
            for (int k=0;k<ftplist.getLength();k++)
             {
               Node subnode = ftplist.item(k);
              if (subnode.getNodeType()==Node.ELEMENT_NODE)
               {
                /** 打印ftp所有节点属性的值 */
                 System.out.println(subnode.getNodeName()+":"+subnode.getFirstChild().getNodeValue());
               }
             }
          }
       }
    }

9、演示修改文件的具体某个节点的值

   /**
     *   演示修改文件的具体某个节点的值  
     */

   public static void xmlUpdateDemo()
    {
       Document document = load("classes/xmlWriteDemoByDocument.xml");
       Node root=document.getDocumentElement();
      /** 如果root有子元素 */
      if(root.hasChildNodes())
       {
         /** ftpnodes */
          NodeList ftpnodes = root.getChildNodes();
         /** 循环取得ftp所有节点 */
         for (int i=0;i<ftpnodes.getLength();i++)
          {                       
             NodeList ftplist = ftpnodes.item(i).getChildNodes();
            for (int k=0;k<ftplist.getLength();k++)
             {
               Node subnode = ftplist.item(k);
              /** 删除ftp-chn节点 */
              if (subnode.getNodeType()==Node.ELEMENT_NODE&&subnode.getNodeName()=="ftp-chn")
               {
                  ftpnodes.item(i).removeChild(subnode);
               }
              /** 修改ftp-host的值为 192.168.0.1 */
              if (subnode.getNodeType()==Node.ELEMENT_NODE&&subnode.getNodeName()=="ftp-host")
               {                  
                  subnode.getFirstChild().setNodeValue("192.168.0.1");
               }
             }
             
          }
       }
      /** 修改完后重新保存 */
       doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml");
    }

----------------------JoeCom 2006-11-12

9.   xml 文件换成 xml格式的字符串

 

public String xmltoString(Document doc) {
  String xmlstring = null;// 储存字符串类型的xml文件

  if (doc != null) {
   StringWriter strWtr = new StringWriter();
   StreamResult strResult = new StreamResult(strWtr);
   TransformerFactory tfac = TransformerFactory.newInstance();
   try {
    Transformer t = tfac.newTransformer();
    t.setOutputProperty(OutputKeys.ENCODING, "gb2312");
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty(OutputKeys.METHOD, "xml"); // xml, html,//
    // text
    t.setOutputProperty(
      "{http://xml.apache.org/xslt}indent-amount", "4");
    t.transform(new DOMSource(((org.w3c.dom.Document) doc)
      .getDocumentElement()), strResult);
   } catch (Exception e) {
    System.err.println("XML.toString(Document): " + e);
   }
   xmlstring = strResult.getWriter().toString();

  }
  return xmlstring;
 }

 

 

 

分享到:
评论
1 楼 maimode 2012-02-07  
好东西,非常实用

相关推荐

    java 操作xml(dom,sax,jdom,dom4j)需要的包

    如果处理的XML文件较小,DOM和JDOM可能是不错的选择,因为它们提供了完整的文档表示。对于大型文件,SAX和DOM4J由于其低内存占用而更受欢迎。如果需要进行复杂的查询,DOM4J的XPath支持则非常有用。在引入对应的库...

    Java与XML联合编程之DOM篇.rar_dom xml_dom xml java_java xml

    本教程将深入探讨Java中使用DOM模型解析XML文件的方法。 首先,我们需要了解DOM的基本概念。DOM将XML文档视为一个节点树,其中根节点代表整个文档,其他节点则表示文档的各种元素、属性、文本等。通过DOM API,我们...

    用java读取xml文件的四种方法

    要读取XML文件,Java提供了多种方法。以下是四种常用的方法,每种都有其适用场景和特点: 1. **DOM解析器(Document Object Model)** DOM解析器将整个XML文件加载到内存中,创建一个树形结构,允许我们通过节点...

    java操作xml dom dom4j sax jdom

    与DOM不同,SAX是基于事件驱动的解析器,它逐行读取XML文档,遇到每个元素、属性或文本时触发相应的事件回调。这种方式节省内存,适合处理大型XML文件。在SAX中,你需要定义一个实现`DefaultHandler`接口的类,然后...

    java读取xml文件

    Java 读取 XML 文件是 Java 开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等领域。本教程将深入讲解如何在 Java 中处理 XML 文件,同时涉及 XML 的 ...

    java解析xml——dom

    调用`DocumentBuilder`的`parse()`方法,传入XML文件路径,返回一个`Document`对象。 3. **获取节点列表** 使用`Document`的`getElementsByTagName()`方法,例如`doc.getElementsByTagName("message")`,来获取...

    Java与XML读写之DOM篇

    然后,使用`DocumentBuilder`的`parse()`方法加载XML文件并构建`Document`对象,这一步是解析XML文档的关键。 ```java DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = ...

    java 操作XML 采用(dom+dom4j)读写源码 lib包

    总结来说,DOM解析器将整个XML文件加载到内存,适合小型XML文件;DOM4J在DOM的基础上增加了更多功能,易于使用。两者在读写XML时都有其适用场景,根据项目需求选择合适的方法。使用这些库,开发者可以方便地解析XML...

    用java读取修改xml文件的代码实现

    本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...

    Java创建xml文档笔记(DOM,DOM4J)

    在Java编程中,XML(可扩展标记语言)是一种被广泛用于数据存储和交换的格式,尤其是在Web服务和配置文件中。本笔记将深入探讨如何使用DOM(文档对象模型)和DOM4J库来创建XML文档。 一、DOM解析器 DOM是W3C推荐的...

    Java解析XML文件的DOM和SAX方式.doc

    Java 解析 XML 文件的 DOM 和 SAX 方式 Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种...

    读取XML文件的四种方法

    在Java中,读取XML文件有多种方法,本文将介绍四种常见的方法:DOM、DOM4J、JDOM和SAX。 DOM(Document Object Model) DOM是W3C组织制定的XML文档对象模型,它提供了对XML文档的树形结构表示。使用DOM方法读取XML...

    Java DOM 生成XML

    Java DOM(Document Object Model)是一种基于树形结构的XML文档...尽管DOM操作相对消耗资源,但其灵活性和强大功能使其成为处理XML的常用工具。对于复杂的XML操作,可以结合使用其他库如JAXB或JDOM,以简化编程任务。

    DOM4j操作xml文件

    DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    DOM解析器读取整个XML文档到内存中,构建一棵由节点组成的树,这些节点代表了XML文档的所有元素、属性、文本和其他结构。 在Java中,`org.w3c.dom`包提供了DOM解析XML的基础接口和类。以下是DOM解析XML的基本步骤:...

    java 操作xml 的dom4j2.rar

    1. **解析XML文档:** 使用DOM4J2,你可以轻松读取XML文件并将其转换为DOM4J的Document对象。这个过程称为解析。例如: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new File...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    java读取xml文件生成文件

    Java语言在处理XML文件时,提供了丰富的API和库,使得我们可以轻松地读取、解析、修改和生成XML文档。在给定的场景中,我们主要关注如何使用Java来读取XML文件并根据需求生成新的文件。以下是关于这个主题的详细说明...

Global site tag (gtag.js) - Google Analytics