bean-利用dom4j解析spring.xml

问题描述

利用dom4j解析spring.xml

<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

解决方案

1)自己创建Document对象
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
Document document = DocumentHelper.createDocument();

Element root = document.addElement("students");

其中students是根节点,可以继续添加其他节点等操作。
(2)读取XML文件获取Document对象
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
//创建SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("XXXX.xml"));

(3)读取XML文本内容获取Document对象
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
String xmlStr = "......";

Document document = DocumentHelper.parseText(xmlStr);

3、示例
(1)xml文件内容如下
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="UTF-8"?>

<微信公众号>@残缺的孤独</微信公众号>

<学号>20140101</学号>

<地址>北京海淀区</地址>

<座右铭>要么强大,要么听话</座右铭>

<新浪微博>@残缺的孤独</新浪微博>

<学号>20140102</学号>

<地址>北京朝阳区</地址>

<座右铭>在哭泣中学会坚强</座右铭>

(2)解析过程
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
package cn.com.yy.dom4j;

import java.io.File;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import org.junit.Test;

public class Dom4JforXML {

@Test
public void test() throws Exception{
    //创建SAXReader对象
    SAXReader reader = new SAXReader();
    //读取文件 转换成Document
    Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));
    //获取根节点元素对象
    Element root = document.getRootElement();
    //遍历
    listNodes(root);
}  

//遍历当前节点下的所有节点
public void listNodes(Element node){
    System.out.println("当前节点的名称:" + node.getName());
    //首先获取当前节点的所有属性节点
    List<Attribute> list = node.attributes();
    //遍历属性节点
    for(Attribute attribute : list){
        System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
    }
    //如果当前节点内容不为空,则输出
    if(!(node.getTextTrim().equals(""))){
         System.out.println( node.getName() + ":" + node.getText());
    }
    //同时迭代当前节点下面的所有子节点
    //使用递归
    Iterator<Element> iterator = node.elementIterator();
    while(iterator.hasNext()){
        Element e = iterator.next();
        listNodes(e);
    }
}

}

(3)解析结果
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
当前节点的名称:students

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

当前节点的名称:student2

属性id:002

当前节点的名称:新浪微博

新浪微博:@残缺的孤独

当前节点的名称:学号

学号:20140102

当前节点的名称:地址

地址:北京朝阳区

当前节点的名称:座右铭

座右铭:在哭泣中学会坚强

4、dom4j操作节点属性
使用dom4j可以操作节点属性,比如添加节点属性、删除节点属性、修改属性值等操作。下面使用dom4j为上述的student1节点删除id属性,新添name属性。
(1)代码示例
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
@Test

public void test2()throws Exception{

//创建SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

    System.out.println("-------添加属性前------");
    //获取节点student1
    Element student1Element = root.element("student1");
    //遍历
    listNodes(student1Element);
    //获取其属性
    Attribute idAttribute = student1Element.attribute("id");
    //删除其属性
    student1Element.remove(idAttribute);
    //为其添加新属性
    student1Element.addAttribute("name", "这是student1节点的新属性");
    System.out.println("-------添加属性后------");
    listNodes(student1Element);
}

(2)结果
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
-------添加属性前------

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

-------添加属性后------

当前节点的名称:student1

属性name:这是student1节点的新属性

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

5、dom4j新增节点
使用dom4j可以删除指定节点、新增节点等操作,我们使用dom4j为student1节点新增phone节点,如下。
(1)代码
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
//添加节点

@Test

public void test3()throws Exception{

//创建SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

System.out.println("-------添加节点前------");

//获取节点student1

Element student1Element = root.element("student1");

//遍历

listNodes(student1Element);

//添加phone节点

Element phoneElement = student1Element.addElement("phone");

//为phone节点设置值

phoneElement.setText("137xxxxxxxx");

System.out.println("-------添加节点后------");

listNodes(student1Element);

}

(2)结果
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
-------添加节点前------

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

-------添加节点后------

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

当前节点的名称:phone

phone:137xxxxxxxx

6、把Document对象写入新的文件
有时,我们需要把document对象写入新的文件,dom4j提供了对应的API以便我们进行操作。我们在完成第 5 后,把document写入新的文件s1.xml,如下。
(1)代码
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
//添加节点后,写入新的文件

@Test

public void test4()throws Exception{

//创建SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

System.out.println("-------添加节点前------");

//获取节点student1

Element student1Element = root.element("student1");

//遍历

listNodes(student1Element);

//添加phone节点

Element phoneElement = student1Element.addElement("phone");

//为phone节点设置值

phoneElement.setText("137xxxxxxxx");

System.out.println("-------添加节点后------");

listNodes(student1Element);

//把student1Element写入新文件

writerDocumentToNewFile(document);

System.out.println("---写入完毕----");

}

//document写入新的文件
public void writerDocumentToNewFile(Document document)throws Exception{
    //输出格式
    OutputFormat format = OutputFormat.createPrettyPrint();
    //设置编码
    format.setEncoding("UTF-8");
    //XMLWriter 指定输出文件以及格式
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/cn/com/yy/dom4j/s1.xml")),"UTF-8"), format);  

    //写入新文件
    writer.write(document);
    writer.flush();
    writer.close();
}

(2)查看s1.xml文件
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="UTF-8"?>

<微信公众号>@残缺的孤独</微信公众号>

<学号>20140101</学号>

<地址>北京海淀区</地址>

<座右铭>要么强大,要么听话</座右铭>

137xxxxxxxx

<新浪微博>@残缺的孤独</新浪微博>

<学号>20140102</学号>

<地址>北京朝阳区</地址>

<座右铭>在哭泣中学会坚强</座右铭>

因为涉及到中文,所以在输出时要设定UTF8编码,OutputStreamWriter进行设置编码。
还有输出格式的问题,在此处使用的是OutputFormat.createPrettyPrint(),输出文档时进行了排版格式化。还有一种是OutputFormat.createCompactFormat()方法,输出内容是一行,没有进行格式化,是紧凑型的输出。如下:
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="UTF-8"?>

<微信公众号>@残缺的孤独</微信公众号><学号>20140101</学号><地址>北京海淀区</地址><座右铭>要么强大,要么听话</座右铭>137xxxxxxxx<新浪微博>@残缺的孤独</新浪微博><学号>20140102</学号><地址>北京朝阳区</地址><座右铭>在哭泣中学会坚强</座右铭>

解决方案二:

利用dom4j创建XML和解析XML
利用JAXP和DOM4J解析XML
利用dom4j解析xml--天气预报

时间: 2024-12-06 00:18:39

bean-利用dom4j解析spring.xml的相关文章

编码-dom4j解析spring.xml,ref这种通过id调用是怎么解析的?

问题描述 dom4j解析spring.xml,ref这种通过id调用是怎么解析的? spring.xml如下: <?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans h

java中利用Dom4j解析和生成XML文档_java

一.前言 dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异.功能强大.和非常方便使用的特点.   另外xml经常用于数据交换的载体,像调用webservice传递的参数,以及数据做同步操作等等,   所以使用dom4j解析xml是非常有必要的. 二.准备条件 dom4j.jar 下载地址:http://sourceforge.net/projects/dom4j/ 三.使用Dom4j实战 1.解析xml文档 实现思路: <1>根据读取的xml路径,传递给SAX

xml解析-spring.xml如何解析,用dom4j及解析

问题描述 spring.xml如何解析,用dom4j及解析 解决方案 参考:http://blog.csdn.net/redarmy_chen/article/details/12969219 解决方案二: dom4j解析xmldom4j 解析 xmldom4j解析xml

利用SAX解析读取XML文件

xml     这是我的第一个BLOG,今天在看<J2EE应用开发详解>一书,书中讲到XML编程,于是就按照书中的步骤自己测试了起来,可是怎么测试都不成功,后来自己查看了一遍源码,发现在读取XML文件的位置时有误,于是进行了更改,还真行了,心中涌出一中成就感,现将源码贴出来与给位分享: 使用XML文件连接MYSQL数据库,database.conf.xml文件如下: <database-conf><datasource> <driver>com.mysql.

使用DOM4j解析XML文件,由于xmls和scheme存在无法正常利用Xpath方法取到节点

问题描述 经过测试,发现问题出在下面两个xml语句上.<CNML xmlns="http://www.cnml.org.cn/2005/CNMLSchema"><NameTopic scheme="urn:cnml:xinhua.org:20070701:topiclist.cnml-Organization-1:1" topicRef="Xinhua">xmlns和scheme是特殊的属性吗,如果把这两个属性去掉就可以正

死磕Spring系列之二,bean标签的解析和BeanDefinition的注册

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dba10g.blog.51cto.com/764602/1726519 书接上回.到现在环境已经配置完毕,已经可以跑一个简单的HELLOWORLD了.正式进入源码阅读的阶段.使用过Spring的都知道,我们只需要在配置文件中配置好对象规则(比如类,依赖,属性...),然后我们就可以在程序中使用对象了. 我们可以做一个假设,如果让我们写一个程序,根据XML配置信息,生成想要的对象

[Java开发之路](12)JDOM和DOM4J解析XML文档

1. JDOM解析XML文档 1.1 简介 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作.JDOM 直接为JAVA编程服务.它利用更为强有力的JAVA语言的诸多特性(方法重载.集合概念以及映射),把SAX和DOM的功能有效地结合起来.在使用设计上尽可能地隐藏原来使用XML过程中的复杂性.利用JDOM处理XML文档将是一件轻松.简单的事. JDOM帮助文档 : http://www.jdom.org/docs/apidocs/ Jar包

Spring 配置中 bean 的 class 使用工厂 Bean 的含义解析

Spring 配置中 bean 的 class 使用工厂 Bean 的含义解析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. <bean id="studentMapper&q

VC++中利用MSXML解析XML文档

c++|xml 四.程序实现 下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档. (1)源XML文档(xmlfile.xml)如下: <?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="设备1"> <Type>13</Type> <TypeName>保护</Ty