`
kirin
  • 浏览: 62005 次
社区版块
存档分类
最新评论

dom4j中文问题

阅读更多

学习使用dom4j中,找了网络上的例子开始遇到些问题

1  载了dom4j.zip下来,一般要引入两个jar包,一个自然是dom4j-1.6.1.jar,另外一个是jaxen-1.1-beta-6.jar,不引的话会报一个java.lang.NoClassDefFoundError: org/jaxen/JaxenException

2 网络上找的这个例子简单明了,不过有个中文问题,研究了一下解决了

java 代码
  1. package util;   
  2.   
  3. import java.io.*;   
  4. import java.util.*;   
  5. import org.dom4j.*;   
  6. import org.dom4j.io.*;    
  7.   
  8. public class Xmldo {    
  9.     public static void main(String[] args) {   
  10.            
  11.         createXMLFile("E:/1.xml");   
  12.         formatXMLFile("E:/1.xml");   
  13.     }   
  14.     public static void getTestXML(){   
  15.            
  16.     }   
  17.     public static int createXMLFile(String filename){           
  18.         int returnValue = 0;   
  19.         /** 建立document对象 */  
  20.         Document document = DocumentHelper.createDocument();   
  21.         /** 建立XML文档的根books */  
  22.         Element booksElement = document.addElement("books");   
  23.         /** 加入一行注释 */  
  24.         booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");   
  25.         /** 加入第一个book节点 */  
  26.         Element bookElement = booksElement.addElement("book");   
  27.         /** 加入show属性内容 */  
  28.         bookElement.addAttribute("show","yes");   
  29.         /** 加入title节点 */  
  30.         Element titleElement = bookElement.addElement("title");   
  31.         /** 为title设置内容 */  
  32.         titleElement.setText("Dom4j Tutorials");           
  33.         /** 类似的完成后两个book */  
  34.         bookElement = booksElement.addElement("book");   
  35.         bookElement.addAttribute("show","yes");   
  36.         titleElement = bookElement.addElement("title");   
  37.         titleElement.setText("Lucene Studing");   
  38.         bookElement = booksElement.addElement("book");   
  39.         bookElement.addAttribute("show","no");   
  40.         titleElement = bookElement.addElement("title");   
  41.         titleElement.setText("Lucene in Action中文");          
  42.         /** 加入owner节点 */  
  43.         Element ownerElement = booksElement.addElement("owner");   
  44.         ownerElement.setText("O'Reilly");   
  45.         document.setXMLEncoding("UTF-8");   
  46.         try{   
  47.             /** 将document中的内容写入文件中 */  
  48.             //XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));   
  49.             //换成下面的方法,才会生成UTF-8格式的xml文件,不能读的时候会报错   
  50.             //org.dom4j.DocumentException:   Invalid   byte   1   of   1-byte   UTF-8   sequence.   
  51.             XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(filename),"UTF-8"));               
  52.             writer.write(document);   
  53.             writer.close();   
  54.             /** 执行成功,需返回1 */  
  55.             returnValue = 1;   
  56.         }catch(Exception ex){   
  57.             ex.printStackTrace();   
  58.         }                  
  59.         return returnValue;   
  60.      }   
  61.     /**  
  62.      * 修改XML文件中内容,并另存为一个新文件  
  63.      * 重点掌握dom4j中如何添加节点,修改节点,删除节点  
  64.      * @param filename 修改对象文件  
  65.      * @param newfilename 修改后另存为该文件  
  66.      * @return 返回操作结果, 0表失败, 1表成功  
  67.      */  
  68.     public int modiXMLFile(String filename,String newfilename){   
  69.        int returnValue = 0;   
  70.        try{   
  71.            SAXReader saxReader = new SAXReader();    
  72.            Document document = saxReader.read(new File(filename));   
  73.            /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */  
  74.            /** 先用xpath查找对象 */  
  75.            List list = document.selectNodes("/books/book/@show" );    
  76.            Iterator iter = list.iterator();   
  77.            while(iter.hasNext()){   
  78.               Attribute attribute = (Attribute)iter.next();   
  79.               if(attribute.getValue().equals("yes")){   
  80.                   attribute.setValue("no");   
  81.               }      
  82.            }              
  83.            /**  
  84.             * 修改内容之二: 把owner项内容改为Tshinghua  
  85.             * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type  
  86.             */  
  87.            list = document.selectNodes("/books/owner" );   
  88.            iter = list.iterator();   
  89.            if(iter.hasNext()){   
  90.               Element ownerElement = (Element)iter.next();   
  91.               ownerElement.setText("Tshinghua");   
  92.               Element dateElement = ownerElement.addElement("date");   
  93.               dateElement.setText("2004-09-11");   
  94.               dateElement.addAttribute("type","Gregorian calendar");   
  95.            }              
  96.            /** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */  
  97.            list = document.selectNodes("/books/book");   
  98.            iter = list.iterator();   
  99.            while(iter.hasNext()){   
  100.               Element bookElement = (Element)iter.next();   
  101.               Iterator iterator = bookElement.elementIterator("title");   
  102.                while(iterator.hasNext()){   
  103.                   Element titleElement=(Element)iterator.next();   
  104.                   if(titleElement.getText().equals("Dom4j Tutorials")){   
  105.                      bookElement.remove(titleElement);   
  106.                   }   
  107.               }   
  108.            }                        
  109.            try{   
  110.               /** 将document中的内容写入文件中 */  
  111.               //XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));   
  112.               //换成下面的方法   
  113.                XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(newfilename),"UTF-8"));   
  114.               writer.write(document);   
  115.               writer.close();   
  116.               /** 执行成功,需返回1 */  
  117.               returnValue = 1;   
  118.            }catch(Exception ex){   
  119.               ex.printStackTrace();   
  120.            }             
  121.        }catch(Exception ex){   
  122.            ex.printStackTrace();   
  123.        }   
  124.        return returnValue;   
  125.     }   
  126.     /**  
  127.      * 格式化XML文档,并解决中文问题  
  128.      * @param filename  
  129.      * @return  
  130.      */  
  131.     public static int formatXMLFile(String filename){   
  132.        int returnValue = 0;   
  133.        try{   
  134.            SAXReader saxReader = new SAXReader();   
  135.            //假如read的格式不是utf-8的,下面这句就报错Invalid byte 2 of 2-byte UTF-8 sequence              
  136.            Document document = saxReader.read(new File(filename));   
  137.               
  138.            XMLWriter writer = null;   
  139.            /** 格式化输出,类型IE浏览一样 */  
  140.            OutputFormat format = OutputFormat.createPrettyPrint();   
  141.            /** 指定XML编码 */  
  142.            format.setEncoding("UTF-8");   
  143.            //writer= new XMLWriter(new FileWriter(new File(filename)),format);   
  144.            //换成下面的方法   
  145.            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filename),"UTF-8");              
  146.            writer= new XMLWriter(osw,format);   
  147.               
  148.            writer.write(document);   
  149.            writer.close();   
  150.            /** 执行成功,需返回1 */  
  151.            returnValue = 1;        
  152.        }catch(Exception ex){   
  153.            ex.printStackTrace();   
  154.        }   
  155.        return returnValue;   
  156.     }   
  157. }   
分享到:
评论
2 楼 Daemon_Liu 2010-04-20  
51行代码输出的xml文件是无换行模式的,看起来别扭,可以改为如下形式:
OutputFormat format = OutputFormat.createPrettyPrint();
	       XMLWriter writer = new XMLWriter(
	    		   new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8"),format
	           );
1 楼 scrong 2008-06-19  
谢谢谢谢


相关推荐

    dom4j-2.1.1-API文档-中文版.zip

    标签:dom4j、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    dom4j-2.1.1-API文档-中英对照版.zip

    包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.dom4j:dom4j:2.1.1; 标签:dom4j、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...

    Dom4j解析XML及中文问题

    Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题

    dom4j1.6.1 api chm

    dom4j官方api文档,自己改为chm格式,方便大家开发学习.分享我们需要的东西!

    Dom4j-1.6.1 API文档.chm

    dom4j 1.6.1 API,dom4j是一个优秀的xml解析工具包

    dom4jApi 中文文档

    dom4j 编译好的中文版,例子详细,简单易懂

    dom4j中文彻底解决

    dom4j中文彻底解决

    dom4j的jar包以及说明文档

    dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.

    dom4j-API 帮助文档

    dom4japi dom4j帮助文档 dom4j.jar

    Dom4j API 及各种 中文 介绍文档 帮助文档

    此包有以下资源: dom4j API DOM4J 使用简介 dom4j(Version 1[1].6.1)快速入门 Matrix - 与 Java 共舞 - Dom4j 编码问题彻底解决 使用 dom4j 解析 XML

    dom4j 中文版教程 pdf格式

    dom4j中文版教程,相信对大家都很用用吧

    Dom4j是一个易用的、开源的库

    DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections ...

    dom4j中文api

    当前文件为pdf+chm 英文版,请酌情下载使用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    dom4j 输出XML时中文乱码解决

    dom4j 输出XML时中文乱码解决 dom4j 输出XML时中文乱码解决

    中文 DOM4j入门例子.txt

    中文 DOM4j入门例子 一。解析XML 二。使用迭代器: 三。强大的导航使用XPath: 四。快速循环 五。创建一个新的XML文档 六。记录到一个文件中的一个文件, 七。转换为字符串 八。用XSLT样式文档

    Dom4J Api 1.61.CHM

    JAVA文档 Dom4J Api 1.61.CHM

    dom4j API+中文简介包

    dom4j API+中文简介包,我这个绝对可以用哈,附带中文介绍PDF。童叟无欺~

    dom4j 1.6.1.jar +dom.4j.api

    dom是解析xml的工具,内附dom4j.jar及dom4j.api,api是英文的,到目前没找到中文的,大家可以尝试英文api,不能老依赖中文的了。

    dom4j_1.6.1_api 文档(CHM)

    dom4j 1.6.1 官方英文文档 dom4j 1.6.1 官方英文文档

    dom4j-1.6.1-API+源代码-中文版.rar

    通过曲线方式 让大家获得dom4j-1.6.1的 中文版本的API 和 带有中文注释的源代码 注:需要谷歌浏览器配合

Global site tag (gtag.js) - Google Analytics