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

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中文api

    **DOM4J中文API**是Java开发者常用的XML处理库,它提供了一套强大的API来操作XML文档。DOM4J是一个非常灵活的开源Java XML API,它涵盖了DOM、SAX和JDOM等接口,并且提供了很多高级特性,如XPath查询、XML Schema...

    dom4j中文彻底解决

    【DOM4J编码问题彻底解决】 DOM4J是一个流行的Java XML API,它提供了灵活和强大的方式来处理XML文档。在处理XML文档时,编码问题是一个常见的挑战,特别是当涉及到读取、写入或转换XML文件时。本文主要讨论了如何...

    dom4jApi 中文文档

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

    dom4j 中文版教程 pdf格式

    **DOM4J中文版教程详解** DOM4J是Java领域中一个非常强大的XML处理库,它提供了丰富的API来处理XML文档,包括解析、创建、修改和查询XML文档。本教程将深入探讨DOM4J的核心概念和实用技巧,帮助开发者更好地理解和...

    dom4j1.6.1 api chm

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

    Dom4j-1.6.1 API文档.chm

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

    dom4j API+中文简介包

    6. **中文教程**:`Dom4j使用简介.pdf`提供了中文版的DOM4J使用指南,对于初学者或者英语不太熟练的开发者来说,这是一个极好的学习资源,能够帮助他们快速上手DOM4J。 通过这些资源,开发者可以深入了解和掌握DOM4...

    Dom4j解析XML及中文问题

    本文将深入探讨如何使用Dom4j解析XML以及解决中文乱码的问题。 首先,让我们了解Dom4j的基本用法。在解析XML文件时,通常会使用`DocumentBuilderFactory`和`DocumentBuilder`来创建一个`Document`对象,然后通过这...

    最新Dom4j 与 dom4j英文版API

    **Dom4j详解** Dom4j是一个开源的Java库,专为XML处理设计,包括文档对象模型(DOM),简单API for XML(SAX)以及事件驱动的XML解析器(StAX)。它提供了一种灵活的方式来处理XML文档,适用于文档创建、读取、更新...

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

    **DOM4J 1.6.1 API及源代码中文版详解** DOM4J是一个非常优秀的Java XML API,它提供了全面而强大的XML处理功能,包括读取、创建、修改和查询XML文档。这个压缩包“dom4j-1.6.1-API+源代码-中文版.rar”包含了DOM4J...

    dom4j 1.6.1.jar +dom.4j.api

    DOM4J 1.6.1.jar 和 dom4j.api 是两个与XML处理密切相关的库,主要用于解析、操作和生成XML文档。在这个压缩包中,我们有两个关键组件: 1. **DOM4J 1.6.1.jar**: DOM4J 是一个流行的Java库,它提供了对XML文档的...

    dom4j帮助文档

    **DOM4J中文帮助文档详解** DOM4J是一款强大的Java XML API,它提供了一套灵活且功能丰富的处理XML文档的工具。DOM4J是基于Java集合框架构建的,因此对于熟悉Java的开发者来说,它的使用非常直观。在这个文档中,...

    dom4j中文帮助文档(如果你没用过它,那么它对你一定有帮助)

    DOM4J中文帮助文档是一份宝贵的资源,尤其对于初学者或者那些正在寻找快速理解和应用DOM4J的人来说,它能提供详细的指导和实例。 首先,DOM4J的核心概念是Document对象,它代表整个XML文档。通过DOM4J,你可以使用...

    dom4j-API 帮助文档

    **dom4j API 帮助文档** **一、dom4j 概述** dom4j 是一个开源的 Java XML 库,它提供了一种高效、灵活的方式来处理 XML 文档。dom4j 提供了丰富的 API,使得开发人员能够轻松地进行 XML 的解析、创建、修改和查询...

    dom4j 输出XML时中文乱码解决

    然而,在使用 Dom4J 输出 XML 文档时,中文字符可能会出现乱码问题。这是因为 Dom4J 的默认编码方式可能不支持中文字符。解决这个问题的方法是将输出编码方式设置为 UTF-8。 设置输出编码方式 ------------------ ...

    专门为java程序员准备的API系列之四:dom4j英文API+中文使用示例

    本系列的第四部分主要针对Java程序员,详细讲解了如何利用DOM4J进行XML的读取、写入、修改以及查询等操作。下面将详细介绍DOM4J的相关知识点。 首先,DOM4J的全称是Document Object Model for Java,它是一个开源...

    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.

Global site tag (gtag.js) - Google Analytics