`
天涯海角tour
  • 浏览: 173985 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java dom操作xml

阅读更多
转载http://blog.chinaunix.net/u/20045/showart_334646.html
我们需要引入的包:

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");
    }
分享到:
评论

相关推荐

    java dom 操作xml

    虽然Java标准库提供了DOM操作的基本功能,但一些第三方库如JDOM、DOM4J提供了更友好的API和额外的功能,可以简化XML操作。 总之,Java DOM提供了一种强大的方式来操作XML,通过理解和熟练运用DOM API,我们可以...

    Java DOM 生成XML

    Java DOM(Document Object Model)是一种基于树形结构的XML文档处理模型,它允许程序员通过对象接口来访问和操作XML文档的各个部分。...对于复杂的XML操作,可以结合使用其他库如JAXB或JDOM,以简化编程任务。

    java_dom解析xml xml java

    通过DOM,我们可以将整个XML文档加载到内存中,并对其进行读取、修改等操作。这种方式非常适合那些需要对XML文档进行多次访问或修改的应用场景。 #### 标题解释 标题“java_dom解析xml xml java”表明了本文档的...

    java dom 解析 xml 实例

    Java DOM 解析 XML 实例 Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过...

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

    标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...

    JAVA DOM解析XML文件过程详解

    DOM 是一种应用程序接口(API),它将 XML 文档转换为一个树形结构,允许开发者使用 JAVA 语言来访问和操作 XML 文档中的元素和属性。 在 JAVA 中,DOM 解析 XML 文件的过程主要涉及到以下几个步骤: 1. 创建一个 ...

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

    DOM(Document Object Model)是W3C制定的一种标准,它为XML文档提供了一个树形结构,使得程序员可以方便地访问和操作XML文档的每一个元素。本教程将深入探讨Java中使用DOM模型解析XML文件的方法。 首先,我们需要...

    java 的dom的读取xml

    Java中的DOM解析XML是一种常见的处理XML数据的方式,它允许程序以结构化的方式访问和操作XML文档。DOM(Document Object Model)是一种W3C标准,它将XML文档转换为一棵节点树,每个节点代表XML文档的一个部分,如...

    java dom4 解析xml

    java dom4 解析xml

    Java用DOM4J读取XML

    ### Java使用DOM4J读取XML知识点解析 #### 一、概述 在Java开发中,处理XML文件是一项常见的任务。DOM4J是一个简单且功能强大的Java库,用于处理XML文档。它提供了类似于DOM的API,但更为轻量级且易于使用。本篇将...

    java DOM解析xml操作大全,增删改查

    在XML操作中,`StudentDao`可能包含了读取XML文件,通过DOM解析器处理XML内容,以及保存修改后的XML到文件等操作。 最后,项目中的`StudentWeb`、`StudentEntity`、`StudentBiz`和`StudentDao`这四个文件夹可能分别...

    DOM读取XML文件

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便、直观,但缺点是占用内存较大,不适用于处理大型XML文件。 首先,我们需要了解XML的...

    XML.rar_java Dom xml_java xml dom_xml_xml dom tree java

    使用DOM解析XML文件 Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件。对于特别大的文档,解析和加载整个文档可能很慢且很耗资源 http://www.iteye.com/topic/763926

    java平台中使用DOM解析xml文件

    总的来说,理解并熟练掌握DOM解析XML是Java开发中的基础技能,无论是在简单的数据读取还是复杂的XML操作中,它都能提供强大的支持。同时,根据项目需求和性能考虑,可以选择JDOM等其他XML处理库作为替代方案。

    java dom sax XML入门教程

    Java作为一款强大的编程语言,提供了多种处理XML的API,其中包括DOM(Document Object Model)和SAX(Simple API for XML)。本教程将帮助初学者深入理解这两种解析XML的方法。 1. DOM解析器 DOM解析器将整个XML...

    xml.rar_dom操作xml_java 操作 xml_java xml_sax_xml

    - 相较于DOM,SAX是一种事件驱动的解析器,只在需要时读取XML的一部分,因此内存占用小,适合处理大型XML文件。 - `org.xml.sax`包提供了SAX解析的核心接口,如`Parser`、`ContentHandler`和`Attributes`。 - `...

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

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

    java dom4j 解析xml的例子,可用

    Java DOM4J库是用于处理XML文档的一个强大的开源框架,它提供了一种灵活且高效的方式来解析、创建和操作XML内容。DOM4J这个名字来源于“Document Object Model”(DOM)和“Java”的组合,它扩展了DOM接口,同时引入...

    java使用dom解析xml

    在 Java 中,DOM 解析允许开发者将整个 XML 文件加载到内存中,形成一个树形结构,然后通过这个结构来访问和操作 XML 的各个部分。 首先,我们需要引入 Java 的核心解析库,即 javax.xml.parsers 命名空间。这个库...

    java中dom4j读写XML

    DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。

Global site tag (gtag.js) - Google Analytics