`
langgufu
  • 浏览: 2293451 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DOM方式进行的XML文件、Document、String之间的相互转换(转载)

阅读更多

XML文件test.xml:

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?><books><book><name>哈里波特</name><price>10</price><memo>这是一本很好看的书。</memo></book></books>  

 

java代码:

 

Java代码   收藏代码
  1. import java.io.*;  
  2. import java.net.URI;  
  3.   
  4. import javax.xml.parsers.*;  
  5. import javax.xml.transform.*;  
  6. import javax.xml.transform.dom.DOMSource;  
  7. import javax.xml.transform.stream.StreamResult;  
  8.   
  9. import org.w3c.dom.Document;  
  10. import org.xml.sax.InputSource;  
  11.   
  12. import com.sun.org.apache.xml.internal.serialize.*;  
  13.   
  14. /** 
  15.  * DOM方式操作XML 
  16.  *  
  17.  * @author Watson Xu 
  18.  * @date 2011-5-3 上午09:49:27 
  19.  */  
  20. public class OperateXMLByDOM {  
  21.     /** 
  22.      * 将给定文件的内容或者给定 URI 的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象 
  23.      *  
  24.      * @param filePath 文件所在路径 
  25.      * @return DOM的Document对象 
  26.      * @throws Exception 
  27.      */  
  28.     public static Document xml2Doc(String filePath) {  
  29.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  30.         DocumentBuilder builder = null;  
  31.         FileInputStream inputStream = null;  
  32.         Document doc = null;  
  33.         try {  
  34.             builder = factory.newDocumentBuilder();  
  35.   
  36.             /* 通过文件方式读取,注意文件保存的编码和文件的声明编码要一致(默认文件声明是UTF-8) */  
  37.             File file = new File(filePath);  
  38.             doc = builder.parse(file);  
  39.   
  40.             /* 通过一个URL方式读取 */  
  41.             URI uri = new URI(filePath);//filePath="http://java.sun.com/index.html"  
  42.             doc = builder.parse(uri.toString());  
  43.   
  44.             /* 通过java IO 流的读取 */  
  45.             inputStream = new FileInputStream(filePath);  
  46.             doc = builder.parse(inputStream);  
  47.             return doc;  
  48.         } catch (Exception e) {  
  49.             return null;  
  50.         } finally {  
  51.             if (inputStream != null) {  
  52.                 try {  
  53.                     inputStream.close();  
  54.                 } catch (IOException e) {  
  55.                     return null;  
  56.                 }  
  57.             }  
  58.         }  
  59.     }  
  60.   
  61.     /** 
  62.      * Document 转换为 String 并且进行了格式化缩进 
  63.      *  
  64.      * @param doc XML的Document对象 
  65.      * @return String 
  66.      */  
  67.     public static String doc2FormatString(Document doc) {         
  68.         StringWriter stringWriter = null;  
  69.         try {  
  70.             stringWriter = new StringWriter();  
  71.             if(doc != null){  
  72.                 OutputFormat format = new OutputFormat(doc,"UTF-8",true);  
  73.                 //format.setIndenting(true);//设置是否缩进,默认为true  
  74.                 //format.setIndent(4);//设置缩进字符数  
  75.                 //format.setPreserveSpace(false);//设置是否保持原来的格式,默认为 false  
  76.                 //format.setLineWidth(500);//设置行宽度  
  77.                 XMLSerializer serializer = new XMLSerializer(stringWriter,format);  
  78.                 serializer.asDOMSerializer();  
  79.                 serializer.serialize(doc);  
  80.                 return stringWriter.toString();  
  81.             } else {  
  82.                 return null;  
  83.             }  
  84.         } catch (Exception e) {  
  85.             return null;  
  86.         } finally {  
  87.             if(stringWriter != null){  
  88.                 try {  
  89.                     stringWriter.close();  
  90.                 } catch (IOException e) {  
  91.                     return null;  
  92.                 }  
  93.             }  
  94.         }  
  95.     }  
  96.       
  97.     /** 
  98.      * Document 转换为 String 
  99.      *  
  100.      * @param doc XML的Document对象 
  101.      * @return String 
  102.      */  
  103.     public static String doc2String(Document doc){  
  104.         try {  
  105.             Source source = new DOMSource(doc);  
  106.             StringWriter stringWriter = new StringWriter();  
  107.             Result result = new StreamResult(stringWriter);  
  108.             TransformerFactory factory = TransformerFactory.newInstance();  
  109.             Transformer transformer = factory.newTransformer();  
  110.             transformer.setOutputProperty(OutputKeys.INDENT, "yes");  
  111.             transformer.transform(source, result);  
  112.             return stringWriter.getBuffer().toString();  
  113.         } catch (Exception e) {  
  114.             return null;  
  115.         }  
  116.     }  
  117.   
  118.     /** 
  119.      * String 转换为 Document 对象 
  120.      *  
  121.      * @param xml 字符串 
  122.      * @return Document 对象 
  123.      */  
  124.     public static Document string2Doc(String xml) {  
  125.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  126.         DocumentBuilder builder = null;  
  127.         Document doc = null;  
  128.         InputSource source = null;  
  129.         StringReader reader = null;  
  130.         try {  
  131.             builder = factory.newDocumentBuilder();  
  132.             reader = new StringReader(xml);  
  133.             source = new InputSource(reader);//使用字符流创建新的输入源  
  134.             doc = builder.parse(source);  
  135.             return doc;  
  136.         } catch (Exception e) {  
  137.             return null;  
  138.         } finally {  
  139.             if(reader != null){  
  140.                 reader.close();  
  141.             }  
  142.         }  
  143.     }  
  144.   
  145.     /** 
  146.      * Document 保存为 XML 文件 
  147.      *  
  148.      * @param doc Document对象 
  149.      * @param path 文件路径 
  150.      */  
  151.     public static void doc2XML(Document doc, String path) {  
  152.         try {  
  153.             Source source = new DOMSource(doc);  
  154.             Result result = new StreamResult(new File(path));  
  155.             Transformer transformer = TransformerFactory.newInstance().newTransformer();  
  156.             transformer.setOutputProperty(OutputKeys.INDENT, "yes");  
  157.             transformer.transform(source, result);  
  158.         } catch (Exception e) {  
  159.             return;  
  160.         }  
  161.     }  
  162.   
  163.     public static void main(String[] args) {  
  164.         Document doc = xml2Doc("test.xml");  
  165.         System.out.println(doc);  
  166.         System.out.println(doc2String(doc));  
  167.         System.out.println(doc2FormatString(doc));  
  168.         doc = string2Doc(doc2FormatString(doc));  
  169.         doc2XML(doc, "1.xml");  
  170.     }  
  171. }  

 

 

输出的XML文件1.xml:

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2. <books>  
  3.     <book>  
  4.         <name>哈里波特</name>  
  5.         <price>10</price>  
  6.         <memo>这是一本很好看的书。</memo>  
  7.     </book>  
  8. </books>  

 

分享到:
评论

相关推荐

    Java读取XML文件自制工具类

    用WC3的DOM实现对XML文件的读取。 方法摘要: //通过文件路径及文件名读取xml public XMLReader(String path, String filename); //初始化读取包下的的XML文件 public XMLReader(Package package1, String fileName)...

    生成XML文件ABAP程序

    生成XML文件ABAP程序 REPORT zams_xml_dom_create . TYPE-POOLS: ixml. CLASS cl_ixml DEFINITION LOAD. TYPES: BEGIN OF xml_line, data(256) TYPE x, END OF xml_line. DATA: l_ixml TYPE REF TO if_ixml, ...

    dom4j解析xml字符串

    // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read(new File("User.hbm.xml")...

    dom4j生成xml

    该项目采用dom4j从数据库表中生成xml数据 项目文档、数据库建表语句均已放置在项目中。 关键代码如下: public String getXml(Connection conn, int rm_id, String path) { //声明xml字符串 String file...

    使用dom4j读写XML文档

    使用dom4j读写XML文档 1.获取文档的根节点. Element rootElm = document.getRootElement(); 2.取得某节点的单个子节点. Element memberElm=root.element("member");// "member"是节点名 3.取得节点的文字 String ...

    使用dom4j.doc

    1.读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document对象. String text = "&lt;members&gt;&lt;/...

    android xml文件操作

    xml文件操作 public class XmlUtils { /** * 获取Document对象。根据xml文件的名字获取Document对象。 * * @param file * 要获取对象的xml文件全路径。 * @return 返回获取到的Document对象。 * @...

    DWR.xml配置文件说明书(含源码)

    因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回...

    Java解析XML工具类--(java源码)

    public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf....

    c#读取XML的几种方法.pdf

    XmlDocument 是一个文档对象模型(DOM),它允许我们编辑和更新 XML 文档,可以随机访问文档中的数据,还可以使用 XPath 查询。使用 XmlDocument,我们可以加载整个 XML 文档到内存中,然后使用 XPath 语法来查询和...

    dom4j-2.1.0.jar

    dom4j目前我用过这个jar包解析过XML中的CDATA,其他的还在学习中。 我的代码: public static String GetCDATA(String strXml) { SAXReader reader = new SAXReader(); String strJson = "[]"; try { Document ...

    dom4j

    } &lt;br&gt; /** * 修改XML文件中内容,并另存为一个新文件 * 重点掌握dom4j中如何添加节点,修改节点,删除节点 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件 * @...

    xml入门教程/xml入门教程

    XSLT,是用于对XML进行文档格式转换,把一个XML文档转换成另一种格式的XML文档,但是其中内容是不变的。 &2.DTD(Document Type Difinition DTD文档是用于规定XML文档的结构。只有结构符合所引用的DTD文件的XML文件...

    php xml常用函数的集合(比较详细)

    a、DOMDocument-&gt;load()作用:加载xml文件用法:DOMDocument-&gt;load( string filename )参数:filename,xml文件;返回:如果成功则返回 TRUE,失败则返回 FALSE。 b、DOMDocument-&gt;loadXML()作用:加载xml代码用法:...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML支持UTF-8,所以可以处理任何语言的XML文件,而且TinyXML也支持“legacy模式”——一种在支持UTF-8之前使用的编码方式,可能最好的解释是“扩展的ascii”。 正常情况下,TinyXML会检测出正确的编码并使用它...

    dom4-j1.6.1

    1.读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document document = reader.read(new File&#40;"input.xml"&#41;); 2.解析XML形式的文本,得到document对象. String text = "&lt;members&gt;&lt;/...

    Dm4J操作xml文件.rar

    自己写的一个操作xml文件的类,可以把节点存入实体对象,也可以把实体对象插入xml文件,以及很多查询方法 返回类型全是String或List&lt;String&gt;、Map&lt;String,String&gt;等

    java解析xml

    // 把要解析的XML文档转化为输入流,以便DOM解析器解析它 InputStream is = new FileInputStream("test.xml"); // 解析XML文档的输入流,得到一个Document Document doc = dombuilder.parse(is); // 得到XML...

    xmldom:基于纯 JavaScript W3C 标准(XML DOM Level 2 Core)的 DOMParser 和 XMLSerializer 模块

    XMLDOM xmldom 是一个 javascript 用于浏览器支持的以下 API: 将 XML 字符串转换为 DOM 树( new DOMParser().parseFromString(xml, mimeType) =&gt; Document ) 创建、访问和修改 DOM 树( new DOMImplementation()....

    dom4j-jdom封装和解析例子

    String fromRead=Dom4jTest2.class.getClassLoader().getResource("xml/map1.xml").getPath(); List&lt;Pois&gt; list=new ArrayList(); SAXReader saxReader = new SAXReader(); org.dom4j.Document document=...

Global site tag (gtag.js) - Google Analytics