`

Dom4jUtil

    博客分类:
  • java
阅读更多
public class Dom4jUtil implements XmlDocument {

	String root="employees";
	public void createXml(String fileName) {
		// TODO Auto-generated method stub
		Document document = DocumentHelper.createDocument();   
        Element employees=document.addElement(root);//root
        Element employee=employees.addElement("employee");   
        employee.addAttribute("title", "XML Zone"); //给employee添加title属性,并设置他的值
        Element name= employee.addElement("name");name.setText("小倪");
        Element sex=employee.addElement("sex");sex.setText("famale");
       
        Element age=employee.addElement("age");age.setText("29");
       
        try {
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(fileName));
//            Writer fileWriter=new FileWriter(fileName);   
//            XMLWriter xmlWriter=new XMLWriter(fileWriter);   
            xmlWriter.write(document);   
            xmlWriter.close();

        } catch (IOException e) {   
            System.out.println(e.getMessage());   
        }   

	}

	public void parserXml(String fileName) {//只能解析2层结构的xml(不包括根root)
		// TODO Auto-generated method stub
		File inputXml=new File(fileName);   
        SAXReader saxReader = new SAXReader();   
        try {   
           Document document = saxReader.read(inputXml);   
           Element employees=document.getRootElement();   
           for(Iterator i = employees.elementIterator(); i.hasNext();){   
                Element employee = (Element) i.next();   
                for(Iterator j = employee.elementIterator(); j.hasNext();){   
                    Element node=(Element) j.next();   
                    System.out.println(node.getName()+":"+node.getText());   
                }   
 
           }   
       } catch (DocumentException e) {   
           System.out.println(e.getMessage());   
       }   
//       System.out.println("dom4j parserXml");   

	}
	public static void main(String[] args){
		//System.out.println(new Util().hash("111111"));
		Dom4jUtil dom=new Dom4jUtil();
		String fileName="C:\\t.xml";
		dom.createXml(fileName);
		System.out.println("ok!!!");
//		dom.parserXml(fileName);
		dom.getRoot(dom.readXML(fileName));
		
	}

	//递归解析XML
	//用法:dom.getRoot(dom.readXML(fileName));
	public Document readXML(String fileName) {
        Document document = null;   
        SAXReader saxReader = new SAXReader();   
        try {   
            document = saxReader.read(new File(fileName));   
        } catch (DocumentException e) {   
            e.printStackTrace();   
        }   
        return document;   
    }
	 public void getRoot(Document document) {   
	        Element root = document.getRootElement();   
	        tree(root);   
	    }

    private void tree(Element element) {//递归解析xml
        Iterator iterator = element.elementIterator();   
        List list = null;   
        while (iterator.hasNext()) {   
            Element node = (Element) iterator.next();   
            list = node.elements();   
            if (list != null && list.size() > 0) {   
//                System.out.print(node.getName()+"\n");//父元素 
                int count = node.attributeCount();   
                for (int i = 0; i < count; i++) {   
                    Attribute attr = node.attribute(i);   
                    System.out.println("属性" + attr.getName() + ":" + attr.getText());   
                }
                tree(node);   
            } else {   
                System.out.println(node.getName() + "=" + node.getText());   
            }   
        }   
    }

}


出现Invalid byte 2 of 2-byte UTF-8 sequence原因:
FileWriter对象进行文件的输出是不能正确进行文件编码的原因所在,java中由Writer类继承下来的子类没有提供编码格式处理,所以dom4j也就无法对输出的文件进行正确的格式处理。这时候所保存的文件会以系统的默认编码对文件进行保存,在中文版的window下java的默认的编码为GBK,也就是所虽然我们标识了要将xml保存为utf-8格式但实际上文件是以GBK格式来保存的,所以这也就是为什么能够我们使用GBK、GB2312编码来生成xml文件能正确的被解析,而以UTF-8格式生成的文件不能被xml解析器所解析的原因。
所以我们在使用dom4j的来生成我们的XML文件时不应该直接为在构建XMLWriter时,不应该直接为其赋一个Writer对象,而应该通过一个OutputStream的子类对象来构建。也就是说在我们上面的代码中,不应该用FileWriter对象来构建xml文档,而应该使用FileOutputStream对象来构建
分享到:
评论

相关推荐

    dom4j 工具类 使用例子

    首先,`Dom4jUtil.java`可能是包含DOM4J实用方法的类。这个类可能包括了创建、查询、修改XML文档的各种静态方法。例如,可能会有用于解析XML文件到Document对象的方法,或者用于将Document对象转换回XML字符串的方法...

    通过Dom4j创建和读取xml文件下载

    - **Dom4jTest.java**: 测试类,使用JUnit编写,用于验证DOM4JUtil的功能是否正常工作。 - **说明.txt**: 提供了关于如何使用这些文件的简短说明。 在实践中,`Dom4jUtil.java`会包含如`createXMLDocument()`, `...

    通过Dom4j创建和读取xml文件

    - 提供的`Dom4jUtil.java`和`Dom4jTest.java`可能是实现这些操作的示例代码。在`Dom4jUtil.java`中可能定义了一些通用的静态方法,用于创建、读取和修改XML文档;而在`Dom4jTest.java`中,可能会有测试用例来调用...

    dom4j工具类

    而`Dom4jUtil.jar`可能是开发者自定义的DOM4J工具类库,封装了一些常用的操作方法,便于快速集成和使用。 使用DOM4J的基本步骤包括: 1. **导入库**:在Java项目中添加DOM4J的jar包依赖,确保编译和运行时能访问到...

    FusionChart 工具类

    本篇文章将详细讲解与"FusionChart 工具类"相关的知识,主要关注`FusionChartUtil.java`和`Dom4jUtil.java`这两个文件。 首先,我们来看`FusionChartUtil.java`。这个类通常包含了与FusionCharts集成所需的各种实用...

    jsp+servlet+javabean实现数据分页方法完整实例.docx

    String url = DOM4JUtil.class.getResource("").getPath(); try { // 通过文件路径获取配置文件信息 Document doc = sr.read(url + "config.xml"); // 获取根节点 root = doc.getRootElement(); } catch ...

    webservice客户端请求, 以及解析xml

    总之,`HttpClientCallSoapUtil`和`Dom4jUtil`这两个类分别实现了对WebService的调用和响应XML的解析。通过HttpClient发送SOAP请求,并利用Dom4j解析返回的XML数据,可以有效地与Web服务进行交互并处理结果。理解并...

    Pinyin4jUtil.java

    Pinyin4jUtil 验证姓名与拼音是否一致,自持多音字。 /** * 汉字转换位汉语全拼,英文字符不变,特殊字符丢失 * 支持多音字,生成方式如(重当参:zhongdangcen,zhongdangcan,chongdangcen * ,...

    java文件的加载

    ClassLoader cl = Dom4JUtil.class.getClassLoader(); InputStream in = cl.getResourceAsStream("b.properties"); Properties prop = new Properties(); prop.load(in); ``` - **注意**:通过ClassLoader可以...

    PyPI 官网下载 | django-jutil-3.7.13.tar.gz

    4. **开发语言**:这指明django-jutil是作为开发工具使用的,可能包含各种便捷函数、装饰器或管理命令,以简化开发过程。 5. **Python库**:django-jutil作为一个Python库,是为了复用代码和提供特定功能,可以被...

    完整单元测测Jutil数据包

    【标题】"完整单元测测Jutil数据包"所指的是一个包含了Junit多个版本的集合,主要用于进行单元测试。Junit是Java编程语言中最广泛使用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的功能...

    FTP客户端Java类库 ftp4j

    在Java开发环境中,如果需要实现FTP客户端功能,可以借助第三方类库,如`ftp4j`。`ftp4j`是一个功能丰富的Java FTP客户端库,它提供了一套完整的API,方便开发者在Java应用程序中集成FTP功能。 `ftp4j`类库的主要...

    EasyUI扩展方法 + jutil.js

    "jutil.js" 很可能是包含了一系列实用工具函数的JavaScript库,它可能包含字符串操作、数组处理、日期格式化、DOM操作等各种通用功能。这样的工具库在开发中十分常见,因为它能帮助开发者处理各种常见的编程任务,...

    pinyin4j.jar中文转拼音及多音字配置文件

    Java pinyin4j.jar中文转拼音 详细可查看我的博客https://me.csdn.net/Extraordinarylife 中《Java pinyin4j.jar中文转拼音 》

    PyPI 官网下载 | django-jutil-2.4.3.tar.gz

    **PyPI 官网下载 | django-jutil-2.4.3.tar.gz** 在Python的开发环境中,`PyPI`(Python Package Index)是至关重要的一个资源库,它提供了大量预封装的Python软件包,方便开发者进行项目开发。标题中的"PyPI 官网...

    jutil:用于处理JSON的命令行实用程序

    jutil :从命令行戳入JSON 从命令行对JSON API进行了大量测试吗? 对结构化数据不加思索地侮辱了? 手指因打字而疼痛| python -mjson.tool | python -mjson.tool吗? 希望C 0 L O,[R S' 好吧, jutil (可能)...

    PyPI 官网下载 | django-jutil-3.0.8.tar.gz

    《PyPI官网下载 | django-jutil-3.0.8.tar.gz》 在Python的世界里,PyPI(Python Package Index)是最重要的软件仓库之一,它为开发者提供了分享和下载Python库的平台。本文将深入探讨关于`django-jutil-3.0.8.tar....

    图形数据库Neo4j之Python API使用示例

    参考网上的文档,编写了使用 python API 接口实现的接口库:neo4jUtil.py。另外还写一个查询脚本:querySQL.py。 使用方法: 需要安装 neo4j for python 的库: pip install neo4j 修改配置文件:neo4jCfg.py ...

    图形数据库Neo4j之Java API使用示例

    需要使用 java API 编写查询接口,参考网上的示例自己写了一个接口类: Neo4jUtil.java。目前只完成了查询方法。创建、删除及修改方法未实现。请自行参考代码来实现。 使用方法: 在 eclipse 中导入解压缩的工程...

Global site tag (gtag.js) - Google Analytics