dom4j操作xml

合集下载

java_Dom4j解析XML详解

java_Dom4j解析XML详解

学习:Dom4j1、DOM4J简介DOM4J是 出品的一个开源XML 解析包。

DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。

DOM4J 使用起来非常简单。

只要你了解基本的XML-DOM 模型,就能使用。

Dom:把整个文档作为一个对象。

DOM4J 最大的特色是使用大量的接口。

它的主要接口都在org.dom4j里面定义:接口之间的继承关系如下:interface ng.Cloneableinterface org.dom4j.Nodeinterface org.dom4j.Attributeinterface org.dom4j.Branchinterface org.dom4j.Documentinterface org.dom4j.Elementinterface org.dom4j.CharacterDatainterface org.dom4j.CDATAinterface mentinterface org.dom4j.Textinterface org.dom4j.DocumentTypeinterface org.dom4j.Entityinterface org.dom4j.ProcessingInstruction2、XML文档操作12.1、读取XML文档:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。

因为利用了相同的接口,它们的调用方式是一样的。

public static Docum ent load(String filenam e) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}或public static Docum ent load(URL url) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(url); //读取XML文件,获得docum ent对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Do m运算。

org.dom4j.document的用法

org.dom4j.document的用法

org.dom4j.document的用法1.概述o r g.do m4j.do cu men t是一个J av a语言中常用的XM L文档处理库,提供了丰富的功能和便捷的A PI,可以用于解析、创建、修改和操作X ML 文档。

本文将介绍or g.d om4j.d oc um ent的用法,包括文档的创建、节点的查找和修改等。

2.创建文档要使用o rg.d om4j.d o cu me nt,首先需要引入相关的库文件或依赖。

然后可以通过以下方式创建空白的XM L文档:D o cu me nt do cu me nt=D oc um en tH el pe r.c r ea te Do cu me nt();接下来可以向文档中添加根节点和其他节点,例如:E l em en tr oo tE le men t=d oc um en t.ad dEl e me nt("ro ot");E l em en tc hi ld El eme n t=ro ot El em en t.a d dE le me nt("ch ild");3.查找节点o r g.do m4j.do cu men t提供了多种方法用于查找文档中的节点。

下面是几个常用的查找方法的示例:3.1通过路径查找可以使用XP at h表达式来查找节点,例如:E l em en te le me nt=(E l em en t)do cu me nt.s el ec tS in gl eN ode("//r o o t/c hi ld");3.2通过名称查找可以使用节点的名称查找节点,例如:E l em en te le me nt=do c um en t.ge tR oo tEl e me nt().e le me nt("ch il d ");3.3通过属性查找可以使用节点的属性来查找节点,例如:E l em en te le me nt=(E l em en t)do cu me nt.s el ec tS in gl eN ode("//r o o t/c hi ld[@at tr='v a lu e']");4.修改节点o r g.do m4j.do cu men t也允许对节点进行修改操作,包括添加、删除和修改节点的属性等。

dom4j element方法总结

dom4j element方法总结

dom4j element方法总结DOM4J是一个Java库,用于处理XML文档。

它提供了一种方便的方式来解析、修改和创建XML文档。

以下是DOM4J Element的一些常用方法:1. 获取子元素:`List<Element> elements()`: 获取当前元素的所有子元素。

`List<Element> elements(String name)`: 根据指定的元素名称获取所有子元素。

`Element element(String name)`: 根据指定的元素名称获取子元素对象,如果元素名称重复,则获取第一个元素。

2. 获取和设置文本内容:`String getText()`: 获取当前元素对象的文本内容。

`void setText(String text)`: 设置当前元素对象的文本内容。

3. 获取属性值:`String attributeValue(String name)`: 根据指定的属性名称获取其对应的值。

4. 添加属性:`public Element addAttribute(String name, String value)`: 根据指定的属性名称和值进行添加或修改。

5. 获取根元素:`Element getRootElement()`: 获取根元素对象(根标签)。

6. 遍历所有元素节点:可以通过递归的方式遍历所有元素节点并打印它们的名称。

首先获取根元素,然后对每个子元素递归调用此方法。

7. 其他常用操作:获取元素的命名空间URI、命名空间Prefix等。

判断元素是否有某个属性。

删除或替换子元素等。

使用DOM4J时,建议查阅官方文档或相关教程,以了解更多关于Element 和其它相关功能的详细信息。

dom4j的selectnodes方法

dom4j的selectnodes方法

dom4j的selectnodes方法dom4j的selectnodes方法是一种用于在XML文档中选择节点的方法。

该方法可以根据指定的XPath表达式,从XML文档中选取符合条件的节点,并返回一个节点列表。

它提供了一种灵活和方便的方式来操作和遍历XML文档中的节点。

在使用selectnodes方法之前,首先需要创建一个Document对象,该对象表示整个XML文档。

可以使用dom4j提供的SAXReader类来读取XML文档并创建Document对象。

然后,就可以使用selectnodes方法来选择节点了。

selectnodes方法的参数是一个XPath表达式,该表达式描述了要选择的节点的路径和条件。

XPath是一种用于在XML文档中定位节点的语言,它提供了一套简洁而强大的语法。

在XPath表达式中,可以使用各种轴、运算符和函数来描述节点的位置和属性。

通过灵活地组合这些元素,可以实现对节点的精确选择。

下面是一个示例,演示了如何使用selectnodes方法选择XML文档中的节点:```javaimport org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class XPathExample {public static void main(String[] args) {try {// 创建SAXReader对象SAXReader reader = new SAXReader();// 读取XML文档并创建Document对象Document document = reader.read("example.xml"); // 使用selectnodes方法选择节点List<Node> nodes = document.selectNodes("//book");// 遍历节点列表并输出节点信息for (Node node : nodes) {if (node instanceof Element) {Element element = (Element) node;System.out.println("节点名称:" + element.getName());System.out.println("节点内容:" + element.getText());System.out.println("节点属性:" +element.attributeValue("id"));System.out.println("---------------------");}}} catch (DocumentException e) {e.printStackTrace();}}}```在上述示例中,我们首先创建了一个SAXReader对象,并使用该对象读取了一个名为"example.xml"的XML文档,然后创建了一个XPath表达式"//book",该表达式选择了所有名为"book"的节点。

Dom4J解析xml文件动态转换为ListBean或者Map集合

Dom4J解析xml文件动态转换为ListBean或者Map集合

Dom4J解析xml⽂件动态转换为ListBean或者Map集合⼤家在解析⼤量相似xml⽂件的时候是否会遇到这样⼀个问题:冗余的代码去set定义的实体对象Bean的值,基本都是⼀样的操作⽽且毫⽆任何代码价值可⾔所以在这写了⼀个简单的例⼦,类封装了⼏个⽅法你只需传⼊xml⽂件,或者URL路径。

和Bean.Class 类名即可⾃动传回你需要的List集合。

需要解析的xml⽂件<?xml version="1.0" encoding="UTF-8"?><messages><resultCode>0</resultCode><totalCount>2</totalCount><UserLists><UserList><userId>0</userId><loginName>张三0</loginName><email>qsina0@</email><userType>1</userType><status>1</status><roleType>1</roleType><registerIP>192.168.1.0</registerIP><registerTime>2012-06-07 15:35:33</registerTime></UserList><UserList><userId>1</userId><loginName>张三1</loginName><email>qsina1@</email><userType>1</userType><status>1</status><roleType>1</roleType><registerIP>192.168.1.1</registerIP><registerTime>2012-06-07 15:35:33</registerTime></UserList></UserLists></messages>在进⾏相关操作中需要如下包:下⾯是贴出的代码:package mon.util;import ng.reflect.Field;import .URL;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class XmlParseUtil {/*** 反射设置实体不同类型字段的值 <暂时只⽀持⽇期字符串 boolean Integer值设置待扩建>** @param field* @param obj* @param value* @throws Exception*/public static void convertValue(Field field, Object obj, String value)throws Exception {SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");if (field.getGenericType().toString().equals("class ng.Integer")) {field.set(obj, Integer.parseInt(value));} else if (field.getGenericType().toString().equals("boolean")) {field.set(obj, Boolean.parseBoolean(value));} else if (field.getGenericType().toString().equals("class java.util.Date")) {field.set(obj, sim.parse(value));} else {field.set(obj, value);}}/*** 解析xml⽂件返回保存cls的List集合,如果返回码resultCode=1时则返回List为null** @param xml* @param cls* @return* @throws Exception*/@SuppressWarnings("unchecked")public static List<?> parseXml2List(String xml, Class<?> cls)throws Exception {List<Object> lists = null;Document doc = DocumentHelper.parseText(xml);Element et = doc.getRootElement();String root = et.getName();// 查看返回码是否为真.List<Element> list = doc.selectNodes("//" + root + "/resultCode");if (!list.isEmpty() && list.size() > 0) {Element element = list.get(0);String returnResult = element.getText();if (returnResult.equals("0")) {List<Element> father = doc.selectNodes("//" + root + "/"+ cls.getSimpleName()+"s"); //判断对象⽗节点是否有包含数据if(father!=null&&!father.isEmpty()&&father.size()==1){List<Element> userLists = father.get(0).elements();if (userLists!=null&&!list.isEmpty()) {lists = new ArrayList<Object>();for (Element e : userLists) {List<Element> li = e.elements();Class<?> cl = (Class<?>) Class.forName(cls.getName());Object ob = cl.newInstance();for (Element element2 : li) {String name = element2.getName();String value = element2.getText();Field field = ob.getClass().getDeclaredField(name);field.setAccessible(true);convertValue(field, ob, value);}lists.add(ob);}}}}}return lists;}/*** 解析xml⽂件返回保存cls的List集合,如果返回码resultCode=1时则返回List为null** @param url* @param cls* @return* @throws Exception*/@SuppressWarnings("unchecked")public static List<?> parseXml2List(URL url, Class<?> cls)throws Exception {List<Object> lists = null;SAXReader saxReader = new SAXReader();Document doc = saxReader.read(url);Element et = doc.getRootElement();String root = et.getName();// 查看返回码是否为真.List<Element> list = doc.selectNodes("//" + root + "/resultCode");if (!list.isEmpty() && list.size() > 0) {Element element = list.get(0);String returnResult = element.getText();if (returnResult.equals("0")) {List<Element> father = doc.selectNodes("//" + root + "/"+ cls.getSimpleName()+"s");//判断对象⽗节点是否有包含数据if(father!=null&&!father.isEmpty()&&father.size()==1){List<Element> userLists = father.get(0).elements();if (userLists!=null&&!list.isEmpty()) {lists = new ArrayList<Object>();for (Element e : userLists) {List<Element> li = e.elements();Class<?> cl = (Class<?>) Class.forName(cls.getName());Object ob = cl.newInstance();for (Element element2 : li) {String name = element2.getName();String value = element2.getText();Field field = ob.getClass().getDeclaredField(name);field.setAccessible(true);convertValue(field, ob, value);}lists.add(ob);}}}}}return lists;}/*** 解析xml⽂件返回保存Map的集合,map中可能包含key值为returnCode、desc、totalCount等单字段. * 也可能包含存储对象为List<cls>的集合值.* 获取List值key cls_List* @param requestPath* @param cls* @return map* @throws Exception*/@SuppressWarnings("unchecked")public static Map<String, Object> parseXml2Map(String requestPath,Class<?> cls) throws Exception {Map<String, Object> maps = new HashMap<String, Object>();List<Object> lists = new ArrayList<Object>();SAXReader saxReader = new SAXReader();//Document doc = saxReader.read(new File(requestPath));Document doc = saxReader.read(new URL(requestPath));Element et = doc.getRootElement();// 标记List是否为空// boolean bool = true ;// 根节点名字List<Element> rList = et.elements();for (Element element : rList) {List<Element> rLists = element.elements();if (!rLists.isEmpty() && rLists.size() > 0) {//bool = false;// 判断⼆级节点for (Element e : rLists) {List<Element> li = e.elements();Class<?> cl = (Class<?>) Class.forName(cls.getName()); Object ob = cl.newInstance();for (Element element2 : li) {String name = element2.getName();String value = element2.getText();Field field = ob.getClass().getDeclaredField(name);field.setAccessible(true);convertValue(field, ob, value);}lists.add(ob);}} else {maps.put(element.getName(), element.getText());}maps.put(cls.getSimpleName() + "_List", lists);}return maps;}/*** 只获取返回码0为保存成功(true)1为保存失败(false)*/@SuppressWarnings("unchecked")public static boolean parseXmlReturnCode(String xml) {boolean bool = false;try {Document doc = DocumentHelper.parseText(xml);Element et = doc.getRootElement();String root = et.getName();// 查看返回码是否为真.List<Element> list = doc.selectNodes("//" + root + "/resultCode"); if (!list.isEmpty() && list.size() > 0) {Element element = list.get(0);String returnResult = element.getText();if (returnResult.equals("0")) {bool = true;}}} catch (Exception e) {e.printStackTrace();}return bool;}}。

DOM4J详细教程

DOM4J详细教程

DOM4J详细教程
答:
DOM4J是一个Java XML API,它可以用来快速、高效地读取、生成和
修改XML数据。

它支持XPath的完整实现,支持Java5的新功能,并有一
个强大的可扩展的SAX集成,还支持JAXP 1.3、通过支持性能良好的DOM、SAX以及JAXP的结合,它可以提供XML文档的可用性。

1.使用DOM4J
使用DOM4J解析XML文档的主要步骤如下:
(1)创建一个Document对象,该文档对象将描述整个XML文档。

(2)创建一个XMLReader对象,该对象使用DOM4J的API来解析
XML文档。

(3)创建一个DocumentHandler对象,该对象用来处理XML文档内容,如处理XML文档的根元素和子元素等。

(4)使用XMLReader的parse方法来将Document对象与DocumentHandler对象相关联,以便允许访问Document对象的内容。

(5)执行任何必要的处理来解析XML文档中的元素。

2.DOM4J技术
(1)XML读取
DOM4J提供了一组API,可以在处理XML文档时使用。

DOM4J的
org.dom4j.io.XMLReader类可以解析XML文档,将其转换为DOM4J的
Document对象。

它可以使用InputSource或java.io.Reader对象的任何对象,以确保可以将XML文档从字符串、文件或URL读取。

(2)XML写入
(3)XPath查询。

dom4j下载与使用文档

dom4j下载与使用文档

Dom4j下载及使用Dom4j读写XML简介要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在/目前最新dom4j包下载地址:/sourceforge/dom4j/dom4j-1.6.1.zip解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar.以下是相关操作:一.Document对象相关1.读取XML文件,获得document对象.SAXReader reader = new SAXReader();Document document = reader.read(new File("input.xml"));2.解析XML形式的文本,得到document对象.String text = "<members></members>";Document document = DocumentHelper.parseText(text);3.主动创建document对象.Document document = DocumentHelper.createDocument();Element root = document.addElement("members");// 创建根节点二.节点相关1.获取文档的根节点.Element rootElm = document.getRootElement();2.取得某节点的单个子节点.Element memberElm=root.element("member");// "member"是节点名3.取得节点的文字String text=memberElm.getText();也可以用:String text=root.elementT ext("name");这个是取得根节点下的name字节点的文字.4.取得某节点下名为"member"的所有字节点并进行遍历.List nodes = rootElm.elements("member");for (Iterator it = nodes.iterator(); it.hasNext();) {Element elm = (Element) it.next();// do something}5.对某节点下的所有子节点进行遍历.for(Iterator it=root.elementIterator();it.hasNext();){Element element = (Element) it.next();// do something}6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement("age");7.设置节点文字.ageElm.setText("29");8.删除某节点.parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点三.属性相关.1.取得某节点下的某属性Element root=document.getRootElement();Attribute attribute=root.attribute("size");// 属性名name2.取得属性的文字String text=attribute.getText();也可以用:String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.3.遍历某节点的所有属性Element root=document.getRootElement();for(Iterator it=root.attributeIterator();it.hasNext();){Attribute attribute = (Attribute) it.next();String text=attribute.getText();System.out.println(text);}4.设置某节点的属性和文字.newMemberElm.addAttribute("name", "sitinspring");5.设置属性的文字Attribute attribute=root.attribute("name");attribute.setText("sitinspring");6.删除某属性Attribute attribute=root.attribute("size");// 属性名nameroot.remove(attribute);四.将文档写入XML文件.1.文档中全为英文,不设置编码,直接写入的形式.XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));writer.write(document);writer.close();2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK"); // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);writer.write(document);writer.close();五.字符串与XML的转换1.将字符串转化为XMLString text = "<members> <member>sitinspring</member> </members>";Document document = DocumentHelper.parseText(text);2.将文档或节点的XML转化为字符串.SAXReader reader = new SAXReader();Document document = reader.read(new File("input.xml"));Element root=document.getRootElement();String docXmlText=document.asXML();String rootXmlText=root.asXML();Element memberElm=root.element("member");String memberXmlText=memberElm.asXML();六.使用XPath快速找到节点.读取的XML文档示例<?xml version="1.0" encoding="UTF-8"?><projectDescription><name>MemberManagement</name><comment></comment><projects><project>PRJ1</project><project>PRJ2</project><project>PRJ3</project><project>PRJ4</project></projects><buildSpec><buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand></buildSpec><natures><nature>org.eclipse.jdt.core.javanature</nature></natures></projectDescription>使用XPath快速找到节点project.public static void main(String[] args){SAXReader reader = new SAXReader();try{Document doc = reader.read(new File("sample.xml"));List projects=doc.selectNodes("/projectDescription/projects/project"); Iterator it=projects.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println(elm.getText()); }}catch(Exception ex){ex.printStackTrace();}}。

Dom4j向XML中指定位置添加、删除、修改节点——(五)

Dom4j向XML中指定位置添加、删除、修改节点——(五)

Dom4j向XML中指定位置添加、删除、修改节点——(五)需求: 在第⼀本书作者后⾯增加描述 <描述>好书</描述> 思路:获取书下⾯下的所有节点(⼀个list集合),在list集合指定位置添加⼀个元素(list.add(index,object)),最后写⼊原xml⽂档。

原来XML⽂档1<?xml version="1.0" encoding="utf-8"?>23<书架>4<书>5<书名>Java⾼级</书名>6<作者>武陟县</作者>7<价格>200元</价格>8</书>9<书>10<书名 name="xxxxxxxxxxx">Java中级</书名>11<作者>打⽕机</作者>12<价格>2000元</价格>13</书>14</书架>-------------------------------------------------------指定位置添加节点-------------------------------------Java代码:1// 在指定位置添加⼀个节点2 @Test3public void test2() throws Exception {4 SAXReader reader = new SAXReader();5 Document document = reader.read(new File("src/book.xml"));6 Element root = document.getRootElement();78// 获取第⼀个书节点9 Element shu = (Element) root.elements("书").get(0);10// 获取第⼀个节点下的所有节点11 List list = shu.elements(); //[书名,作者,价格]1213// 创建⼀个节点14 Element miaoshu = DocumentHelper.createElement("miaoshu");15 miaoshu.setText("⼀本好书");16 list.add(2,miaoshu);1718// 格式化输出流,同时指定编码格式。

四种xml操作方式的基本使用方法

四种xml操作方式的基本使用方法
System.out.println("地址:" + new String(ch, start, length));
}
}
public void startElement(String uri,String localName,String qName,Attributes attrs) {
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName("VALUE");
for (int i=0;i<nl.getLength();i++){
System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
public MyXMLReader() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
3. 四种xml操作方式的基本使用"1.0" encoding="GB2312"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR>四川省XX县XX镇XX路X段XX号</ADDR>

dom4j解析XML文档

dom4j解析XML文档

将dom4j-1.6.1.jar添加到系统CLASSPATH环境变量中
Dom4j常用的API 【重点掌握】
Element Branch Document
Cloneable
Node
Attribute
DocumentType
CharacterData
ProcessingInstruction
CDATA
<list> <book>疯狂XML讲义</book> <game>扫雷</game> <sport>乒乓球</sport> </list>
在获取<list…/>节点之后,如果希望获取它包含的3个子节点的数 节点之后,如果希望获取它包含的 个子节点的数 在获取 节点之后 据,需要使用如下代码
//获取list元素下的所有子元素 NodeList itemList=list.getChildNodes(); //遍历每个子元素 for(int I=0;I<itemList.getLength();I++){ System.out.println(itemList.item(j).getTextContent().trim()); }
Vistor接口的方法
visit(Attribute node) visit(CDATA node)
简单说明
当Visitor对象访问属性节点时将回调该方法 当Visitor对象访问CDATA片段时将回调该方法 当Visitor对象访问注释节点时将回调该方法 当Visitor对象访问文档根节点时将回调该方法 当Visitor对象访问DTD内容将回调该方法 当Visitor对象访问元素节点将回调该方法 当Visitor对象访问Entity节点将回调该方法 当Visitor对象访问命名空间时回调该方法 当Visitor对象访问处理指令时回调该方法 当Visitor对象访问文档内容时将回调该方法

Dom4j 1.6.1 操作XML初始教程

Dom4j 1.6.1 操作XML初始教程

Dom4j 1.6.1 初始教程Dom4j是什么DD?dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。

dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。

在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。

如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。

这是必须使用的jar包,Hibernate用它来读写配置文件dom4j需要导入dom4j-full.jar包.Dom4j家庭成员主要API都在org.dom4j这个包里定义:1.Attribute Attribute定义了XML的属性2.Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,3.CDATA CDATA 定义了XML CDATA 区域4.CharacterData CharacterData是一个标识借口,标识基于字符的节点。

如CDATA,Comment, Text.5. Comment Comment 定义了XML注释的行为6. Document 定义了XML文档7.DocumentType DocumentType 定义XML DOCTYPE声明8. Element Element定义XML 元素9. ElementHandler ElementHandler定义了Element 对象的处理器10. ElementPath 被ElementHandler 使用,用于取得当前正在处理的路径层次信息11. Entity Entity定义XML entity12. Node Node为所有的dom4j中XML节点定义了多态行为13. NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)14. ProcessingInstruction ProcessingInstruction 定义XML 处理指令.15. Text Text 定义XML 文本节点.16. Visitor Visitor 用于实现Visitor模式.17. XPath XPath 在分析一个字符串后会提供一个XPath 表达式Dom4j如何干活?1.利用dom4j创建一个XML文件:view plaincopy to clipboardprint?package com.xml;import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class CreateXML {public static void main(String[] args) {XMLWriter writer = null;try {// 1.document构建器Document doc = DocumentHelper.createDocument();// 2.添加元素(根)Element students = doc.addElement("students");Element student1 = students.addElement("student");// 添加属性;student1.addAttribute("stuno", "s001");// 添加子元素student1.addElement("stuname").setText("刘光蓝");student1.addElement("stusex").setText("男");student1.addElement("stuage").setText("25");//设置输出格式OutputFormat format=OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");writer = new XMLWriter(new FileWrite("d:/student.xml"),format);writer.write(doc);System.out.println("生成XML成功!");} catch (Exception e) {e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}package com.xml;import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class CreateXML {public static void main(String[] args) {XMLWriter writer = null;try {// 1.document构建器Document doc = DocumentHelper.createDocument();// 2.添加元素(根)Element students = doc.addElement("students");Element student1 = students.addElement("student");// 添加属性;student1.addAttribute("stuno", "s001");// 添加子元素student1.addElement("stuname").setText("刘光蓝");student1.addElement("stusex").setText("男");student1.addElement("stuage").setText("25");//设置输出格式OutputFormat format=OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");writer = new XMLWriter(new FileWrite("d:/student.xml"),format); writer.write(doc);System.out.println("生成XML成功!");} catch (Exception e) {e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}2.利用dom4j读取一个XML文件:view plaincopy to clipboardprint?01.package com.xml;02.03.import java.io.File;04.import java.util.List;05.06.import org.dom4j.Document;07.import org.dom4j.Element;08.import org.dom4j.Node;09.import org.dom4j.io.SAXReader;10.11.public class ReaderXML {12. public static void main(String[] args) {13. try {14. SAXReader saxReader=new SAXReader();15. Document doc=saxReader.read(new File("d:/student.xml"));16. //利用XPath来访问元素,属性17. // /students/student[1] 指定某个元素18. // /students/student/@stuno指定某个属性19. // /students/student[@stuno='s002']做判断20. List<Node> data=doc.selectNodes("/students/student");21. for(Node node:data){22. //node.asXML() 以字符串的格式打印XML23. if("Element".equals(node.getNodeTypeName())){24. Element element=(Element)node;25. //读取属性值26. System.out.println(element.attributeValue("stuno"));27. //读取子元素文本值28. System.out.println(element.elementText("stuname"));29. System.out.println(element.elementText("stusex"));30. System.out.println(element.elementText("stuage")+"\n");31. }32. }33. } catch (Exception e) {34. e.printStackTrace();35. }36. }37.38.}package com.xml;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class ReaderXML {public static void main(String[] args) {try {SAXReader saxReader=new SAXReader();Document doc=saxReader.read(new File("d:/student.xml"));//利用XPath来访问元素,属性// /students/student[1] 指定某个元素// /students/student/@stuno指定某个属性// /students/student[@stuno='s002']做判断List<Node> data=doc.selectNodes("/students/student");for(Node node:data){//node.asXML() 以字符串的格式打印XMLif("Element".equals(node.getNodeTypeName())){Element element=(Element)node;//读取属性值System.out.println(element.attributeValue("stuno"));//读取子元素文本值System.out.println(element.elementText("stuname"));System.out.println(element.elementText("stusex"));System.out.println(element.elementText("stuage")+"\n");}}} catch (Exception e) {e.printStackTrace();}}}3.利用dom4j修改一个XML文件:view plaincopy to clipboardprint?01.package com.xml;02.03.import java.io.File;04.import java.io.FileWriter;05.import java.io.IOException;06.import java.util.List;07.08.import org.dom4j.Document;09.import org.dom4j.Element;10.import org.dom4j.Node;11.import org.dom4j.io.OutputFormat;12.import org.dom4j.io.SAXReader;13.import org.dom4j.io.XMLWriter;14.15.public class UpdateXMLData {16.17. public static void main(String[] args) {18. XMLWriter writer = null;19. try {20. SAXReader saxReader = new SAXReader();21. Document doc = saxReader .read(new File("d:/student.xml"));22. List<Node> data = doc23. .selectNodes("/students/student[@stuno='s002']");24. for (Node node : data) {25. if ("Element".equals(node.getNodeTypeName())) {26. Element temp = (Element) node;27. //修改student的stuno属性值28. temp.setAttributeValue("stuno", "stu002");29. }30. }31. OutputFormat format = OutputFormat.createPrettyPrint();32. format.setEncoding("UTF-8");33. writer = new XMLWriter(new FileWriter("d:/student.xml"), format);34. writer.write(doc);35. System.out.println("修改成功!");36. } catch (Exception e) {37. e.printStackTrace();38. } finally {39. try {40. writer.close();41. } catch (IOException e) {42. // TODO Auto-generated catch block43. e.printStackTrace();44. }45. }46.47. }48.49.}。

基于DOM4J的XML文档解析技术

基于DOM4J的XML文档解析技术
科技信息
计 算机 与 网络
基孑 D OM4 帕 XML文档翩析技Biblioteka J南京政 治学 院 肖 袁
[ 摘 要] 文介绍 了 DoM4产 生的背景和 DOM4 ̄ , 本 l J 并讨 论 了利用 X MLD0M4技术 来实现 动态地创建文档 , J 以及遍 历文档
结构 、 添加 、 修改、 文档 内容等 方法。 [ 关键词 ] DoM4 AP XML DOM S 『 I AX 随着 XML的 日益流行 , 各种数据 的存储 、 传输更 多的是 以 XML文 档的形式进行的。如何对这 些 XML文档进行解析 、 位 、 定 操作和查询来 满足用户的各种需求 , 以及将取得的资料做更进一步 的应用是 XML应 用开发者面临 的关键 问题 。 目前 已经 面世 的 xML 【 解析器有 : O D M、
it aeaaagCoebe ne c v. n.l a l f r j 1 n
itr c r.o j oe ne ae gdm4. d f o N it ae r. m j t b t ne c g o 4. t ue f r o d Ar i it ae r.o 4.r c ne c g m j a h f r o d B n itr c r.o j ou e t ne ae g m4. c m n f o d D itr c r.o j l n ne aeog m4. e t f d E me itfc r.o 5 hrceD t ne aeog m4. aatr a r d C a itr e r.o 4.D T nef e gdm j A A a o C itr c r.o j o met ne ae gdm4. m n f o C itr c r.o 4.et ne ae g m j x f o d T itr c r.o j ou e ty e ne aeog m4.c m nTp f d D

java xml 多层实体类实例

java xml 多层实体类实例

java xml 多层实体类实例摘要:1.Java DOM4j 解析XML 实例2.DOM4j 简介3.多层实体类实例4.解析XML 文档5.实体类转换为DOM4j 节点6.遍历和操作DOM4j 节点7.结论正文:1.Java DOM4j 解析XML 实例在Java 中,DOM4j 是一个常用的XML 解析库,它可以帮助我们方便地解析和操作XML 文档。

今天我们将通过一个多层实体类的实例来学习如何使用DOM4j 解析XML 文档。

2.DOM4j 简介DOM4j 是一个Java 库,它提供了对XML 文档的解析、操作和生成等功能。

与其他XML 解析库相比,DOM4j 具有体积小、解析速度快、支持XPath 等优点。

在官方下载dom4j-1.6.1.zip 解压后,我们可以把dom4j-1.6.1.jar 加入工程中使用。

3.多层实体类实例假设我们有如下一个多层实体类,用于表示一个公司的员工信息:```javapublic class Employee {private String name;private int age;private String position;private String department;// getter 和setter 方法省略}public class Company {private String name;private int number;private List<Employee> employees;// getter 和setter 方法省略}```4.解析XML 文档假设我们有如下一个XML 文档:```xml<company><name>ABC 公司</name><number>100</number><employees><employee><name>张三</name><age>25</age><position>软件工程师</position><department>第二部门</department></employee><employee><name>李四</name><age>30</age><position>测试工程师</position><department>第一部门</department></employee></employees></company>```我们可以使用DOM4j 解析此XML 文档,并生成对应的多层实体类对象。

org.dom4j.document 例子

org.dom4j.document 例子

主题:org.dom4j.document 例子org.dom4j是一个用于操作XML文档的开放源代码的Java库。

它提供了一种简单而灵活的方式来处理XML文档。

org.dom4j.document是其中的一个重要概念,本文将通过给出一个具体的例子来解释org.dom4j.document的使用方法。

在org.dom4j中,org.dom4j.Document类表示XML文档的顶层节点。

一个XML文档通常由一个根元素和若干个子元素组成,org.dom4j.Document类提供了丰富的方法来创建、访问和操作XML 文档。

下面我们将通过一个具体的例子来演示org.dom4j.document 的使用。

假设我们有一个简单的XML文档,内容如下:```xml<?xml version="1.0" encoding="UTF-8"?><bookstore><book category="children"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book><book category="web"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book></bookstore>```我们想要使用org.dom4j.document来操作这个XML文档,首先需要创建一个Document对象。

dom4j element 对象转数组

dom4j element 对象转数组

dom4j element 对象转数组dom4j是一个用于操作XML文档的Java开源库。

在dom4j中,XML 文档的节点都被表示为Element对象。

本文将介绍如何将dom4j Element对象转换为数组,并给出一些使用dom4j操作XML文档的实例。

一、dom4j Element对象简介dom4j库提供了一个Element类来表示XML文档中的节点。

每个Element对象代表一个XML元素,可以包含子元素、属性和文本内容。

通过使用dom4j的API,我们可以方便地对XML文档进行解析、创建、修改和查询等操作。

二、将dom4j Element对象转换为数组的方法dom4j Element对象本身并没有提供直接转换为数组的方法,但我们可以通过以下步骤来实现转换:1. 遍历Element对象的子元素,将每个子元素的值存入一个List 集合中。

2. 将List集合转换为数组。

下面是一个示例代码,演示了如何将dom4j Element对象转换为数组:```import org.dom4j.Element;import java.util.ArrayList;import java.util.List;public class ElementToArray {public static void main(String[] args) {Element rootElement = ...; // 获取根节点Element对象List<String> elementValues = new ArrayList<>();for (Element childElement : rootElement.elements()) {elementValues.add(childElement.getText());}String[] array = elementValues.toArray(new String[0]);for (String value : array) {System.out.println(value);}}}```三、使用dom4j操作XML文档的示例下面给出一些使用dom4j操作XML文档的实例,以帮助读者更好地理解dom4j的使用方法。

dom4j改变XML声明和编码格式

dom4j改变XML声明和编码格式

dom4j改变XML声明和编码格式dom4j 改变XML编码Element rootElement = document.addElement("data");document.setXMLEncoding("GBK"); //默认utf-8...使⽤document.setXMLEncoding这样设置⽽⽣成的xml⽂件仍然是utf-8编码。

需要使⽤OutputFormat设置输出⽂件编码格式。

public static void writeXMLFile(Document document,File file,String Encoding){try {OutputFormat format = OutputFormat.createPrettyPrint();//美化输出不想美化可以使⽤new OutputFormat();format.setEncoding(Encoding.toUpperCase());OutputStream out = new FileOutputStream(file);XMLWriter writer = new XMLWriter(out,format);writer.write(document);writer.close();}catch (IOException e) {e.printStackTrace();}使⽤OutputFormat,可以设置xml输出⽂件编码,并且xml⽂件声明处也会跟着改变。

引⽤别⼈答案:解释document.setXMLEncoding和format.setEncoding设置编码的区别public class TestXML{@Testpublic void test() throws IOException{Document doc = new DefaultDocument();doc.addElement("root");// 这⾥打印出来是默认的utf-8System.out.println(doc.asXML());doc.setXMLEncoding("utf-16");// 这⾥打印出来是修改后的utf-16System.out.println(doc.asXML());// 这⾥没有设置编码格式默认保存的是utf-8,看⼀下dom4j的源码就知道了saveXML(doc, "D:\\temp\\test\\test1.xml", null);// 这⾥设置了所以保存以后编码格式是big5saveXML(doc, "D:\\temp\\test\\test2.xml", "big5");}private void saveXML(Document doc, String filePath, String encode) throws IOException{OutputFormat format = new OutputFormat();if (null != encode){format.setEncoding(encode.toUpperCase());}XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(filePath),format);xmlWriter.write(doc);xmlWriter.flush();xmlWriter.close();}}上⾯代码出⾃最后要说⼀下:XMLWriter可以传⼊OutputStream或者WriterXMLWriter writer = new XMLWriter(OutputStream, OutputFormat);XMLWriter writer = new XMLWriter(Writer, OutputFormat);最初试着传⼊了new FileWriter(file),如下try {XMLWriter writer = new XMLWriter(new FileWriter(f), format);writer.write(document);writer.close();result = fileName;} catch (IOException e) { // TODO Auto-generated catch blocke.printStackTrace();}但是得到的结果并不对。

Dom4J、JDOM、DOM、SAX和Pull技术解析XML文件

Dom4J、JDOM、DOM、SAX和Pull技术解析XML文件

解析XML文件的五种技术1.1SAX技术SAX处理的优点非常类似于流媒体的优点。

分析能够立即开始,而不是等待所有的数据被处理。

而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。

这对于大型文档来说是个巨大的优点。

事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。

一般来说,SAX还比它的替代者DOM快许多。

选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM 还是SAX解析模型是一个非常重要的设计决策。

DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。

DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。

用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。

可以很容易的添加和修改树中的元素。

然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。

由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。

SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。

但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

1.1.1 SAX语法简介SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。

SAX 解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s1.addElement("姓名").addText("张三") ;
s1.addElement("性别").addText("男") ;
Element s2 = root.addElement("学生2") ;
s2.addAttribute("id", "002") ;
s2.addElement("姓名").addText("李四") ;
e.remove(e.element("年龄")) ;
break;
}
}
OutputFormat format =newOutputFormat().createPrettyPrint() ;
format.setEncoding("GB2312") ;
XMLWriter writer =newXMLWriter(newFileWriter(path),format) ;
break ;
}
}
writer = new XMLWriter(new FileWriter(path),formart) ;
writer.write(doc) ;
writer.close() ;
} catch (Exception e) {
e.printStackTrace();
}
}
5.添加一个Element
format.setEncoding("GB2312") ;
XMLWriter writer = new XMLWriter(new FileWriter(path),format) ;
writer.write(doc) ;
writer.close() ;
} catch (Exception e) {
while (iter.hasNext()) {
Element e = iter.next() ;
if (e.getName().equals("学生2")) {
e.remove(e.attribute("id")) ;
break ;
}
}
OucreatePrettyPrint() ;
Element root = doc.getRootElement() ;
Iterator<Element> iter = root.elementIterator() ;
while(iter.hasNext()) {
Element e = iter.next() ;
if(e.getName().equals("学生1")) {
writer.write(doc) ;
writer.close() ;
}catch(Exception e) {
//TODOAuto-generated catch block
e.printStackTrace();
}
}
7.删除一个Attribute
static void removeAttribute(String path)
{
try {
SAXReader reader = new SAXReader() ;
OutputFormat formart = OutputFormat.createPrettyPrint() ;
formart.setEncoding("GB2312") ;
XMLWriter writer = null ;
System.out.println(e.getName());
System.out.println(e.attributeValue("id"));
if (e.attributeValue("id").equals("001"))
{
e.selectSingleNode("姓名").setText("王五") ;
static void addElement(String path)
{
SAXReader reader = new SAXReader() ;
try {
Document doc = reader.read(path) ;
Element root = doc.getRootElement() ;
Iterator<Element> iter = root.elementIterator() ;
format.setEncoding("GB2312") ;
XMLWriter writer = new XMLWriter(new FileWriter(path),format) ;
writer.write(doc) ;
writer.close() ;
} catch (Exception e) {
{
SAXReader reader = new SAXReader() ;
try {
OutputFormat format = OutputFormat.createPrettyPrint() ;
format.setEncoding("GB2312") ; //:设置写出来的xml文件的编码方式
XMLWriter writer = new XMLWriter(new FileWriter(path),format) ;
{
SAXReader reader = new SAXReader() ;
try {
Document doc = reader.read(path) ;
Element root = doc.getRootElement() ;
Iterator<Element> iter = root.elementIterator() ;
s2.addElement("性别").addText("女") ;
writer.write(doc) ;
writer.close() ;
} catch (Exception e) {
e.printStackTrace();
}
}
4.更新文件
static void updateXml(String path)
Document doc = reader.read(path) ;
Element root = doc.getRootElement() ;
Iterator<Element> iter = root.elementIterator() ;
while (iter.hasNext()) {
Element e = iter.next() ;
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Document doc = DocumentHelper.createDocument() ;
Element root=doc.addElement("学生信息");
Element s1 = root.addElement("学生1") ;
s1.addAttribute("id", "001") ;
If(file.exist()){
Document doc = reader.read(file) ;
}
3.获取根节点元素
Element root = doc.getRootElement() ;
4.以下就是一些对Element元素的操作
3.写文件
static void writeXML(String path)
// TODO Auto-generated catch block
e.printStackTrace();
}
}
6.删除一个Element
staticvoidremoveElement(String path)
{
SAXReader reader =newSAXReader() ;
try{
Document doc = reader.read(path) ;
1.导入dom4j-1.4.jar包
2.步骤:
1.创建一个读取xml文件的SAXReader类
SAXReader reader = new SAXReader() ;
2.读取xml文件:(路径、文件)
Document doc = reader.read(path) ;
File file = new File(path) ;
while (iter.hasNext()) {
Element e = iter.next() ;
if (e.getName().equals("学生1")) {
e.addElement("年龄").addText("28") ;
break ;
}
}
OutputFormat format = new OutputFormat().createPrettyPrint() ;
相关文档
最新文档