DOM4j学习
dom4j学习总结
-------------书目详情------------
Element elem_price=(Element)price.get(i);
System.out.println(elem_price.getText());
}
//循环根结点下的所有节点,若当前节点为book,则输出这本书的详细信息
System.out.println("-------------书目详情------------");
//提取价格节点的列表
System.out.println("-----------价格列表-------------");
List price=document.selectNodes("//price");
for(int i=0;i<price.size();i++){
</book>
</root>
(三)取得xml节点属性的基本方法
/**
* 取得xml的节点和属性的值
* @throws DocumentException
*/
public void getBaseInfofromDocument() throws DocumentException{
Element element=(Element)iterator.next();
if(element.getName().equals("book")){
System.out.print(element.element("Name").getText()+"\t");
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应用中常用方法总结
Dom4j应用中常用方法总结一:构建dom4j树(表示为Document 元素)常用方法:方式一:直接创建所有元素:dom4j为我们准备了工具类DocumentHelper ,该类的所有的方法都是静态方法,用来创建xml文档的各个组成部分。
1.1.1创建Document 和Element对象:Document doc=DocumentHelper.createDocument();Element eltRoot=DocumentHelper.createElement(“student”);doc.setEltRootElement(eltRoot);1.1.2或者先准备好根元素,使用有参数的构造方法创建Document对象。
Element eltRoot=DocumentHelper.createElement(“student”);Document doc=DocumentHelper.createDocument(eltRoot);1.2:添加节点和设置节点内容:方法:Branch 接口中定义的方法;public Element addElemen(String name) //以指定的name 为当前节点创建一个子节点,并返回新节点的引用public void setText(String text) //将content设置为节点的内容示例如下:Element eltName=eltRoot.addElement(“name”);Element eltAge=eltRoot.addElement(“age”);eltName.setText(“张三”);eltAge.setText(“18”);1.3:添加属性方法:public Element addAttribute(String name,String value)示例如下:eltRoot.addAttribute(“sn”,”01”);方式2:2.1:org.dom4j.io提供了两个类:SAXReader和DOMReader,前者从一个现有的w3c DOM 树构建dom4j树,而SAXReader则使用SAX解析器,从不同的输入源构建dom4j树。
java dom4j 解析
java dom4j 解析DOM4J是一个用于处理XML文档的开源Java库,提供了一种基于树形结构的XML文档处理方式。
通过DOM4J库,我们可以方便地读取、修改和生成XML 文档。
在Java中,使用DOM4J解析XML文档通常需要以下步骤:1. 导入DOM4J库:首先需要将DOM4J库导入到项目中,可以通过Maven或手动下载jar包的方式导入。
2. 创建Document对象:在DOM4J中,XML文档的顶层结构是Document对象,我们需要先创建一个Document对象来表示整个XML文档。
3. 读取XML文档:通过DOM4J提供的SAXReader类,我们可以读取XML 文档并将其解析为Document对象。
可以使用SAXReader的read方法来读取XML 文档。
4. 获取根节点:通过Document对象的getRootElement方法可以获取XML文档的根节点,从而可以通过根节点逐级遍历XML文档的结构。
5. 遍历XML文档:可以通过递归遍历XML文档的节点,获取节点的名称、属性、文本内容等信息。
可以使用Element对象的elements方法获取子节点,使用attributeValue方法获取节点属性的值,使用getText方法获取节点的文本内容。
6. 修改XML文档:通过DOM4J可以方便地修改XML文档的内容,包括添加节点、修改节点属性、修改节点文本内容等操作。
可以使用Element对象的addElement方法添加子节点,setAttributeValue方法修改节点属性的值,setText方法修改节点的文本内容。
7. 生成XML文档:通过DOM4J可以将Document对象生成为XML文档,可以通过OutputFormat类设置XML文档的格式,通过XMLWriter类将Document对象输出为XML文档。
总的来说,使用DOM4J解析XML文档可以方便地读取、修改和生成XML文档,提供了一种便捷的XML文档处理方式。
dom4j xpath语法
dom4j xpath语法在Java开发中,dom4j是一个非常常用的XML解析工具,而XPath 是dom4j中用于定位XML元素的一种查询语言。
本文将详细介绍dom4j中XPath的语法及用法。
一、XPath简介XPath是一种在XML文档中进行导航和查询的语言,它可以通过元素的层级关系、属性、文本内容等信息来定位XML元素。
在dom4j 中,我们可以通过XPath来快速定位XML元素,从而方便地进行数据提取和处理。
二、XPath语法1. 标签定位XPath可以通过标签名称来定位元素。
例如,要定位一个名为"book"的元素,可以使用以下语法://book2. 属性定位XPath还可以通过元素的属性来定位。
例如,要定位一个属性名为"id"且值为"001"的元素,可以使用以下语法://*[@id='001']3. 属性匹配XPath可以通过属性的匹配来定位元素。
例如,要定位属性名为"class"且值包含"active"的元素,可以使用以下语法://*[contains(@class, 'active')]4. 层级定位XPath可以通过元素的层级关系来定位。
例如,要定位某个元素下的子元素,可以使用以下语法://parent/child5. 文本内容定位XPath可以通过元素的文本内容来定位。
例如,要定位某个元素的文本内容为"hello world"的元素,可以使用以下语法://*[text()='hello world']6. 逻辑运算XPath支持逻辑运算符来组合多个条件。
例如,要定位属性名为"class"且值为"active"的元素,并且其父元素的属性名为"type"且值为"container",可以使用以下语法://*[contains(@class,'active') and parent::*[@type='container']]7. 通配符XPath支持通配符"*"来代表任意元素。
dom4j用法
dom4j用法dom4j是一个开源的JavaXML解析库,用于解析XML文档并提供API来操作XML元素和属性。
它可以轻松地读取、分析和生成XML文件。
dom4j支持使用XPath表达式来访问XML文档中的节点和属性。
XPath是一种用于在XML文档中定位节点的语言。
dom4j还提供了一些高级功能,如XML命名空间的支持和DTD验证。
使用dom4j可以轻松地解析XML文档,例如:```SAXReader reader = new SAXReader();Document document = reader.read(newFile('path/to/xml/file.xml'));Element root = document.getRootElement();List<Element> elements = root.elements();for (Element element : elements) {//访问元素}```在上面的代码中,我们使用SAXReader类读取XML文档,并获取根元素。
然后,我们可以使用getRootElement()方法获取XML文档的根元素,并使用elements()方法获取根元素的所有子元素。
除了解析XML文档外,dom4j还提供了API来创建新的XML文档。
例如:```Document document = DocumentHelper.createDocument();Element root = document.addElement('root');Element child = root.addElement('child');child.addAttribute('attribute', 'value');child.setText('text');```在上面的代码中,我们使用DocumentHelper类创建一个新的XML 文档,并添加根元素和一个子元素。
dom4j解析XML的基本用法
dom4j解析XML的基本用法dom4j解析XML的基本用法1. 需要的包:dom4j-1.4/dom4j.jar2. 用到的类:import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;3. 基本操作:创建文档:Document document = DocumentHelper.createDocument();创建根节点:Element catalogElement = document.addElement("catalog");添加注释: catalogElement.addComment("注释");处理指令:catalogElement.addProcessingInstruction("target","text");增加子节点:Element journalElement = catalogElement.addElement("journal");给节点添加属性:journalElement.addAttribute("title", "值");设置节点中的文本:journalElement.setText("值");添加文档类型:document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd ");创建 xml 文件:XMLWriter output = new XMLWriter(new FileWriter( new File("c:/catalog/catalog.xml") ));output.write( document );output.close();加载 xml 文件:SAXReader saxReader = new SAXReader(); //SAXReader 包含在 org.dom4j.io 包中。
dom4j xpath语法
dom4j xpath语法一、什么是dom4j xpath语法dom4j是一个用于操作XML文档的Java开源库,它提供了一种简单而强大的方式来使用xpath语法对XML文档进行解析和查询。
xpath 是一种用于在XML文档中定位节点的语言,它可以通过路径表达式来选择节点或节点集合。
二、dom4j xpath语法的基本用法1. 选择节点使用xpath语法可以选择XML文档中的节点,例如:- 选择根节点:/- 选择当前节点:.- 选择子节点:/- 选择父节点:..- 选择属性节点:/@属性名2. 谓语谓语可以用于过滤节点,例如:- 选择所有属性为id的节点://节点名[@属性名='属性值']- 选择第一个子节点:/节点名[1]3. 选择节点集合使用xpath语法可以选择多个节点,例如:- 选择所有子节点:/节点名/*- 选择所有后代节点://节点名- 选择所有具有相同父节点的节点:/节点名1 | /节点名24. 选择文本内容使用xpath语法可以选择节点中的文本内容,例如:- 选择节点中的文本内容:/节点名/text()- 选择节点及其后代节点中的文本内容://节点名/text()5. 使用通配符通配符可以用于匹配节点名,例如:- 选择所有节点://*- 选择所有具有相同父节点的节点:/节点名/*三、dom4j xpath语法的高级用法1. 使用函数xpath语法支持多种内置函数,例如:- 选择所有包含指定文本的节点://节点名[contains(text(),'文本内容')]- 选择所有具有指定属性的节点://节点名[@属性名]2. 使用轴轴可以用于选择相对于当前节点的节点,例如:- 选择当前节点的所有子节点:child::- 选择当前节点的所有父节点:parent::- 选择当前节点的所有祖先节点:ancestor::- 选择当前节点的所有后代节点:descendant::四、dom4j xpath语法的实例应用假设有以下XML文档:```<bookstore><book category="web"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book><book category="web"><title lang="en">XQuery Kick Start</title> <author>James McGovern</author><year>2003</year><price>49.99</price></book><book category="programming"><title lang="en">Java Programming</title> <author>John Doe</author><year>2005</year><price>59.99</price></book></bookstore>```我们可以使用dom4j xpath语法来查询和操作这个XML文档,例如:- 选择所有book节点://book- 选择所有category属性为web的book节点://book[@category='web']- 选择所有title节点的文本内容://title/text()- 选择第一个book节点的author节点的文本内容://book[1]/author/text()五、dom4j xpath语法的注意事项1. xpath语法区分大小写,要注意节点名和属性名的大小写。
你所应该知道的Dom4J
你所应该知道的Dom4J创建解析器:SAXReader reader = new SAXReader();利用解析器读入xml文档:Document document = reader.read(new File("input.xml"));获取文档的根节点:Element root = document.getRootElement();接口继承结构:Node ---Branch--Document--Element----AttributeNode接口String asXML()asXMLreturns the textual XML representation of this node.将一个节点转换为字符串String getName()getNamereturns the name of this node.获取节点的名称,如果是元素则获取到元素名,如果是属性获取到属性名short getNodeType()Returns the code according to the type of node.获取节点类型,在Node接口上定义了一些静态short类型的常量用来表示各种类型Element getParent()getParentreturns the parent Element if this node supports the parent relationship or nullif it is the root element or does not support the parent relationship.获取父节点,如果是根元素调用则返回null,如果是其他元素调用则返回父元素,如果是属性调用则返回属性所依附的元素。
String getText()Returns the text of this node.返回节点文本,如果是元素则返回标签体,如果是属性则返回属性值List selectNodes(String xpathExpression)selectNodesevaluates an XPath expression and returns the result as a List of Nodeinstances or String instances depending on the XPath expression.利用xpath表达式,选择节点void setName(String name)Sets the text data of this node or this method will throw anUnsupportedOperationException if it is read-only.设置节点的名称,元素可以更改名称,属性则不可以,会抛出UnsupportedOperationException 异常void setText(String text)Sets the text data of this node or this method will throw anUnsupportedOperationException if it is read-only.设置节点内容,如果是元素则设置标签体,如果是属性则设置属性的值void write(Writer writer)writewrites this node as the default XML notation for this node.将节点写出到一个输出流中,元素、属性均支持Branch接口(实现了Node接口)void add(Element element)Adds the given Element to this branch.增加一个子节点Element addElement(QName qname)Adds a new Element node with the given QName to this branch and returns a reference tothe new node.增加一个给定名字的子节点,并且返回这个新创建的节点的引用int indexOf(Node node)Returns the index of the given node if it is a child node of this branch or -1 if the givennode is not a child node.获取给定节点在所有直接点中的位置号,如果该节点不是此分支的子节点,则返回-1boolean remove(Element element)Removes the given Element if the node is an immediate child of this branch.删除给定子元素,返回布尔值表明是否删除成功。
Java Web开发与实践第12章02 dom4j概述
dom4j的下载与配置
dom4j组件可以到dom4j的官方网站 /中下载。在该网站中,提供了下载最新 版的dom4j组件,以及使用dom4j组件所需的Jaxen组件的超链接。单击 相应的超链接,即可进入到对应组件的下载页面。例如,下载目前最新版 本的dom4j组件的URL地址为 /projects/dom4j/files/,下载最新版的Jaxen 组件的URL地址为 /jaxen/distributions/jaxen-1.1.4.zip。 配置后的效果如下图所示。
dom4j概述
本讲大纲:
1、dom4j简介
2、dom4j的下载与配置
dom4j简介
dom4j是上的一个ຫໍສະໝຸດ ava开源项目,主要用于 操作XML文档,如创建XML文档和解析XML文档。dom4j应用于 Java平台,采用了Java集合框架并完全支持DOM、SAX和JAXP, 是一种适合Java程序员使用的Java XML解析器。它具有性能优异 、功能强大和易于使用等特点。目前,越来越多的Java软件都在使 用dom4j来读写XML。
Dom4J入门学习
DOM4J实例教程DOM4J是一个Java 的XML API,用来读写XML文件十分的方便,如果大家对DOM4j 还是不太了解,可以看一下百度百科里的解释:/view/1460716.htm?fr=ala0_1_1当然也可以去官网了解一下:/,/第一个网址内容乱七八糟,所以就不要进去了,第二个网址还好一点,不过都是英文的。
其实,学习开源最好的方法就是去网上找一个实例,然后试着在自己的电脑上跑起来,之后再开始学习代码,当然,首先要下载工共:/projects/dom4j/files/这个网址就是上边的官网的下载地址。
下载的是这个文件:dom4j-1.6.1.zip下边就以一个实例来学习DOM4J,这个例子是我在网上找到的,感觉十分不错,我希望能一步步更细一点,因为当时拷过去的时候,花了好大功夫才运行正确的,原来还有些细节问题要处理,下边给出原文的链接:/blog/169842这个例子共写了五个操作XML的函数,第一个是创建XML文件,通过从根节点(Root)开始添加元素(Element)和属性(Attribute);第二个方法是修改XML文件,包括添加节点,修改节点,删除节点;第二个方法是格式化XML文件,包括格式化编码和输出;第四个方法是通过传递几个数组来批量添加XML的节点,并创建文件;第五个方法是获取XML的某些元素。
本实例基本涵盖了XML的基本操作,现在开始实例。
首先打开Eclipse创建一个新项目,然后将dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar(在/lib 文件夹下边可以找到)这两个jar包拷贝到项目文件夹下边,第一个是dom4j的Jar包,第二个是他所依赖的一个包,当然还有起来依赖的包,由于这个实例不需要就不拷了。
都可以在我们下载的工具文件夹中找到,选中两个Jar包,右键选择Build Path->Add to Build Path;新建一个类名称为getDoc.java,他的源码如下:packagecom.whuid.spider.rss.get;importjava.io.File;import java.io.*;importjava.util.*;importjava.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.dom4j.DocumentException;public class getDoc {publicgetDoc() {}/*** 建立一个XML文档,文档名由输入参数决定* @param filename 需建立的文件名* @return 返回操作结果, 0表失败, 1表成功*/publicintcreateXMLFile(String filename) {/** 返回操作结果, 0表失败, 1表成功*/intreturnValue = 0;/** 建立document对象*/Document document = DocumentHelper.createDocument();/** 建立XML文档的根dates */Element booksElement = document.addElement("dates");/** 加入一行注释*/booksElement.addComment("This is a test workDate,2010.07.29");/** 加入第一个workday节点*/Element bookElement = booksElement.addElement("workday");/** 加入day节点*/Element titleElement = bookElement.addElement("day");/** 设置属性*/titleElement.addAttribute("flag", "yes");/** 为title设置内容*/titleElement.setText("2004-11-16");/** 类似的完成后两个book */bookElement = booksElement.addElement("book");bookElement.addAttribute("show","yes");titleElement = bookElement.addElement("title");titleElement.setText("LuceneStuding");bookElement = booksElement.addElement("book");bookElement.addAttribute("show","no");titleElement = bookElement.addElement("title");titleElement.setText("Lucene in Action");/** 加入owner节点*/Element ownerElement = booksElement.addElement("owner"); ownerElement.setText("O'Reilly");Element ownerElement2 =booksElement.addElement("owner2"); ownerElement2.setText("1'Reilly");try {/** 将document中的内容写入文件中*/XMLWriter writer = new XMLWriter(new FileWriter(newFile(filename)));writer.write(document);writer.close();/** 执行成功,需返回1 */returnValue = 1;}catch (Exception ex) {ex.printStackTrace();}returnreturnValue;}/*** 修改XML文件中内容,并另存为一个新文件* 重点掌握dom4j中如何添加节点,修改节点,删除节点* @param filename 修改对象文件* @paramnewfilename修改后另存为该文件* @return 返回操作结果, 0表失败, 1表成功*/publicintModiXMLFile(String filename, String newfilename) { intreturnValue = 0;try {SAXReadersaxReader = new SAXReader();Document document = saxReader.read(new FileReader(new File(filename)));/** 修改内容之一: 如果book节点中show参数的内容为yes,则修改成no *//** 先用xpath查找对象*/List list = document.selectNodes("/dates/workday/day/@flag");Iterator iter = list.iterator();while (iter.hasNext()) {Attribute attribute = (Attribute)iter.next();if(attribute.getV alue().equals("yes")) {attribute.setValue("no");}}/*** 修改内容之二:* 并在book节点中加入price节点,price节点的内容为120,还为price节点添加一个参数"单位"*/list = document.selectNodes("/dates/book");iter = list.iterator();while (iter.hasNext()) {Element bookElement = (Element) iter.next();//ownerElement.setText("Tshinghua");Element priceElement = bookElement.addElement("price");priceElement.setText("120");priceElement.addAttribute("单位", "人民币");}/** 修改内容之三: 若day内容为2004-11-16,则将属性falg设为false */list = document.selectNodes("/dates/workday");iter = list.iterator();while (iter.hasNext()) {Element workdayElement = (Element) iter.next();Iterator iterator = workdayElement.elementIterator("day");while (iterator.hasNext()) {Element dayElement = (Element) iterator.next(); if (dayElement.getText().equals("2004-11-16")) {List list1 = dayElement.attributes();Iterator iter1 = list1.iterator();while (iter1.hasNext()) {Attribute attribute = (Attribute) iter1.next();attribute.setValue("false");}}}}try {/** 将document中的内容写入文件中*/XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));writer.write(document);writer.close();/** 执行成功,需返回1 */returnValue = 1;}catch (Exception ex) {ex.printStackTrace();}}catch (Exception ex) {ex.printStackTrace();}returnreturnValue;}/*** 格式化XML文档,并解决中文问题* @param filename* @return*/publicintformatXMLFile(String filename) {intreturnValue = 0;try {SAXReadersaxReader = new SAXReader();Document document = saxReader.read(new FileReader(new File(filename)));XMLWriter output = null;/** 格式化输出,类型IE浏览一样*/OutputFormat format = OutputFormat.createPrettyPrint();/** 指定XML字符集编码*/format.setEncoding("utf-8");output = new XMLWriter(new FileWriter(new File(filename)), format);output.write(document);output.close();/** 执行成功,需返回1 */returnValue = 1;}catch (Exception ex) {ex.printStackTrace();}returnreturnValue;}/*** create one XML of file* @param holiday String[]* @param workday String[]* @param filename String filename OF XML*/public void createXML(String[] holiday,String[] workday, String filename) {Document document = DocumentHelper.createDocument();Element booksElement = document.addElement("dates");for (int i = 0; i <holiday.length; i++) {Element bookElement = booksElement.addElement("holiday"); bookElement.addAttribute("flag", "yes");bookElement.setText(holiday[i]);}for (int i = 0; i <workday.length; i++) {Element bookElement = booksElement.addElement("holiday"); bookElement.addAttribute("flag", "no");bookElement.setText(workday[i]);}try {XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));writer.write(document);writer.close();}catch (Exception ex) {ex.printStackTrace();}}publicHashMapgetXMLElement(String filename) throws FileNotFoundException,DocumentException {HashMaphs=new HashMap();SAXReadersaxReader = new SAXReader();Document document = saxReader.read(new FileReader(new File(filename)));Element root=document.getRootElement();List list=root.elements("holiday");if(list.isEmpty()){return null;}else{Iterator it=list.iterator();while(it.hasNext()){Element holiday=(Element)it.next();hs.put(holiday.getTextTrim(),holiday.attribute("flag").getValue());}returnhs;}}public static void main(String[] args)throws FileNotFoundException,DocumentException {getDocgd=new getDoc();/*测试1*/int a=gd.createXMLFile("test.xml");System.out.println(a);/*测试2*///int b=gd.ModiXMLFile("test.xml", "newtest.xml");//System.out.println(b);/*测试3*///int c=gd.formatXMLFile("newtest.xml");//System.out.println(c);/*测试4*///String[] str1={"1","2","3","4"};//String[] str2={"a","b","c","d"};//gd.createXML(str1, str2, "create.xml");//gd.formatXMLFile("create.xml");/*测试5*///HashMap hash=new HashMap();//hash=gd.getXMLElement("create.xml");//String hashStr=hash.toString();//System.out.println(hashStr);}}上边的main方法是我写的测试的方法,请从测试1开始依次打开测试,生成的xml文档在后边是有用的,五个测试分别测试五个函数,第一个测试创建了一个test.xml的文件,第二个测试修改test.xml文件并保存为一个新的newtest.xml文件,第三个测试用来格式化newtest.xml文件,大家运行后就知道格式化的含义了,第四个测试是通过传递两个数组创建一个create.xml文件,第五个测试是从create.xml文件中取出一些属性给一个hashMap,然后输出这个hashmap。
dom4jdependency写法
文章标题:深入探讨dom4jdependency写法在软件开发中,dom4jdependency写法是一个重要的概念。
通过深入研究和探讨dom4jdependency写法,我们可以更好地理解并应用这一概念。
接下来,我将从简单到复杂,由浅入深地探讨dom4jdependency写法,并共享我个人的观点和理解。
1. dom4jdependency是什么?让我们来了解一下dom4jdependency的基本概念。
dom4jdependency是指在Java语言中使用dom4j库来操作XML文件时所需要的依赖。
在Maven项目中,我们通常需要在pom.xml文件中添加dom4jdependency来引入该库。
这样,我们就可以在项目中使用dom4j来读取、解析和操作XML文件。
2. dom4jdependency的基本写法在Maven项目中,添加dom4jdependency的写法非常简单。
我们只需要在pom.xml文件的<dependencies>标签内添加如下代码即可:```<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>```在这段代码中,我们指定了dom4j的groupId、artifactId和版本号,Maven会根据这些信息从中央仓库下载并引入dom4j库到我们的项目中。
3. dom4jdependency的高级应用除了基本的写法之外,我们还可以在添加dom4jdependency时进行一些高级的配置。
我们可以指定依赖的作用范围(scope)、排除传递依赖(exclusions)等。
这些高级配置可以帮助我们更好地管理项目的依赖关系,避免冲突和不必要的引入。
dom4j
dom4jDOM4J 是一个用于处理 XML 文档的开源 Java 库。
它提供了一种简单、灵活和快速的方式来解析、查询和操作 XML 文档。
本文将介绍 DOM4J 的基本概念、使用方法以及其在实际项目中的应用。
第一部分:DOM4J 概述1. DOM4J 的背景DOM(Document Object Model)是一种用于表示和操作 XML文档的标准模型。
DOM4J 是在DOM 的基础上进行了改进和扩展,提供了更加简洁、高效和易用的 API。
它是由 James Strachan 开发并发布的,现在成为了一个被广泛使用的开源项目。
2. DOM4J 的特点DOM4J 的主要特点如下:- 简洁易用:DOM4J 提供了一组简单且一致的 API,使得解析、查询和操作 XML 文档变得非常容易。
- 高性能:DOM4J 使用了一系列优化技术,如基于事件驱动、缓存和快速索引等,以提高解析和操作 XML 文档的性能。
- 支持 XPath:DOM4J 内置了对 XPath 的支持,使开发者可以使用 XPath 表达式来快速查询和定位 XML 文档中的节点。
- 扩展性:DOM4J 提供了一组灵活的接口和工具,使开发者可以自定义和扩展其功能。
第二部分:DOM4j 的使用方法1. DOM4J 的安装与导入要使用 DOM4J,首先需要将其库文件导入到项目中。
可以从DOM4J 的官方网站下载最新的 JAR 文件,然后将其添加到项目的类路径中。
2. 创建 DOM4J 文档对象在开始解析 XML 文档之前,需要创建一个 DOM4J 的文档对象。
可以通过如下代码来创建一个新的空文档对象:```Document document = DocumentHelper.createDocument(); ```3. 解析 XML 文档DOM4J 提供了多种解析 XML 文档的方法,包括从文件、输入流和字符串等不同的数据源中解析。
下面是一个使用 SAXReader 解析XML 文件的例子:```SAXReader reader = new SAXReader();Document document = reader.read(new File(\。
dom4j入门教程
Entity 定义 XML entity
Node 为dom4j中所有的XML节点定义了多态行为
NodeFilter 定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction 定义 XML 处理指令
Text 定义 XML 文本节点
Visitor 用于实现 Visitor模式
XPath 在分析一个字符串后会提供一个 XPath 表达式
接口之间的继承关系如下:
interface ng.Cloneable
interface org.dom4j.Node
interface org.dom4j.Attribute
interface org.dom4j.CDATA
interface ment
interface org.dom4j.Text
interface org.dom4j.DocumentType
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}
或
public static Document load(URLt = null;
try {
SAXReader saxReader = new SAXReader();
document = saxReader.read(url); //读取XML文件,获得document对象
} catch (Exception ex) {
dom4j使用方法详解
dom4j使⽤⽅法详解本⽂先做知识点的简单介绍,最后附完整案例。
⼀、解析XML⽂件1public class Foo {2//url为XML⽂档地址3//⾃⼰封装了⼀个⼯具类返回解析完成的document4public Document parse(URL url) throws DocumentException {5 SAXReader reader = new SAXReader();6 Document document = reader.read(url);7return document;8 }9 }⼆、利⽤JAVA的iterator来导航⽂档(遍历⽂档)public void bar(Document document) throws DocumentException {Element root = document.getRootElement();// 从根节点开始遍历for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {Element element = it.next();// do something}// 从根节点的名为“foo”的⼦节点开始遍历for (Iterator<Element> it = root.elementIterator("foo"); it.hasNext();) {Element foo = it.next();// do something}// 遍历根节点的属性for (Iterator<Attribute> it = root.attributeIterator(); it.hasNext();) {Attribute attribute = it.next();// do something}}三、在<dom4j>中,可以在Document或树中的任何节点(例如Attribute,Element)上计算XPath表达式。
DOM4J介绍及应用
的重载,根据XML不同的对象,将采用不同的方式来访问。上面 是给出的Element和Attribute的简单实现,一般比较常用的就是这 两个。VisitorSupport是DOM4J提供的默认适配器 。注意:这个 注意: 注意 Visitor是自动遍历所有节点的。如果是root.accept(MyVisitor),将 遍历子节点
DOM4J包中的元素<二>
ElementHandler:定义了 Element 对象的处理器 ElementPath:被ElementHandler 使用,用于取得当前 正在处理的路径层次信息 Entity:定义 XML entity Node:为所有的dom4j中XML节点定义了多态行为 NodeFilter:定义了在dom4j节点中产生的一个滤镜或谓 词的行为(predicate) ProcessingInstruction:定义 XML 处理指令 Text:定义XML 文本节点 Visitor:用于实现Visitor模式 XPath:在分析一个字符串后会提供一个XPath 表达式
删除xml节点
要删除XML树上的一棵子树,首先要找到该子树的根节点, 然后对该节点调用detach()方法。注意:如果对根节点调用 了detach()方法,将导致该XML树不再完整(一个XML文件 需要有且仅有一个根节点)。 public void deleteSubtree(Element subtreeRoot) { subtreeRoot.detach(); return; } 要清除Element下的所有子节点(包括Element和text),可 以对该Element调用clearContent()方法。该方法不会清除 Element的属性。 要清除Element下的某个Attribute,首先要获得该Attribute对 象,然后把它作为参数调用Element的remove()方法。
dom4j使用基本指南
dom4j使用基本指南dom4j是一个简单的、灵活的开放源代码的库,支持XML、XPath和XSLT。
与JDOM一样,dom4j也应用于Java平台。
dom4j API使用了Java集合框架并完全支持DOM、SAX和JAXP。
dom4j是由早期开发JDOM的人分离出来而后独立开发的。
与JDOM不同的是,dom4j使用接口和抽象基类,虽然dom4j的API 相对要复杂一些,但它提供了比JDOM更好的灵活性。
dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
dom4j API介绍dom4j-1.6.1 API共有14个包,其中org.dom4j包中包括了表示XML文档组成部分的接口,org.dom4j.io包中包括了构建dom4j文档树的类,以及输出dom4j文档树的类。
(1)创建XML文档在org.dom包中提供了一个DocumentHelper类,该类中多有的方法都是静态方法,其中就包括了创建XML文档各个组成部分的方法。
Document doc=DocumentHelper.createDocument();Element eltRoot=DocumentHelper.createElement("student");doc.setRootElement(eltRoot);也可以先创建跟元素对象,然后在创建文档对象的同时制定根元素,如下:Element eltRoot=DocumentHelper.createElement("student");Document doc=DocumentHelper.createDocument(eltRoot);(2)添加属性在dom4j中,添加属性与JDOM一样简单,如下:eltRoot.addAttribute("sn","01");(3)增加子元素以及设置元素内容在Branch接口中,定义了addElement()方法,如下:public Element addElement(String name)该方法用指定的name为当前节点添加一个子元素节点,并返回新节点的引用。
dom4j小结
dom4j⼩结dom4j dom4j ⼩结1 HTML 的缺点以及 XML 的产⽣原因HTML 最初是⼀种表义的标记语⾔,HTML 的发明⼈ Tim Berners-Lee 最初发明 HTML 的主要⽬的是为了与研究物理的同事交流⽅便(他当时是 CERN(欧洲粒⼦物理实验室)的研究⼈员)。
超链接可以很⽅便地把关于物理学研究的各种资源连接起来。
HTML 最初只是设计⽤来交流⽂本信息的,最初的 HTML 从外表上看就是简单的⽂本,没有多少表⽰显⽰格式的标记。
后来 Marc Andreessen 发现了 HTML 和超链接的商业价值,开发出了世界上第⼀个图形界⾯的浏览器 NCSA Mosaic。
Andreessen 随后与别⼈合作开了 Netscape 公司,并且制造出当时最成功的浏览器 Netscape Navigator。
为了提⾼浏览器的表现能⼒,显⽰更加丰富的内容,就有必要扩充 HTML,添加各种与显⽰格式有关的标记和属性,并且把对多媒体的⽀持加进去。
例如、、、、align、bgcolor 等等。
Netscape Navigator ⼤为成功,尤其是在其推出强⼤的脚本语⾔ JavaScript 和⽀持 plugin 并且能在页⾯中运⾏ Java Applet 后。
甚⾄有⼈认为浏览器就是下⼀代的操作系统,将来开发的所有应⽤程序都应该是针对浏览器开发的。
Netscape 是当年 NASDAQ IPO(新股上市)最成功的公司,Marc Andreessen ⼀夜之间成为了亿万富翁。
这引起了软件之王 M$ 的注意和警觉, M$ 认为 Netscape 正在对其构成威胁,⼀定要把 Netscape 击垮,占据互联⽹这个战略制⾼点。
⽽互联⽹最重要的应⽤软件就是浏览器,于是 M$ 推出了⾃⼰的浏览器 Internet Explorer,并且采⽤免费和捆绑等不正当竞争⼿段,在 4、5 年内将 Netscape 彻底赶出了浏览器市场。
XML解析器——Dom4j
XML解析器——Dom4j⼀、Dom4j 技术概述 先是 Jdom 在 dom 基础上进⾏了封装,⽽ dom4j ⼜对 jdom 进⾏了封装。
DOM4J是⼀个开源的,基于Java的库来解析XML⽂档,它具有⾼度的灵活性,⾼性能和内存效率的API。
这是java的优化,使⽤Java集合像列表和数组。
它可以使⽤DOM,SAX,XPath和XSLT。
它解析⼤型XML⽂档时具有极低的内存占⽤。
⼆、DOM4j 类库 1、类库 官⽹下载需要的 jar 包: 2、使⽤ dom4j 的 jar包: docs 是⽂档⽬录: 在docs ⾥⾯找到 index.html ,快速⼊门三、DOM4j 解析步骤 步骤:1、先加载 xml ⽂件创建 Document 对象2、通过 Document 对象拿到根元素对象3、通过根元素.elelemts(标签名); 可以返回⼀个集合,这个集合⾥放着。
所有你指定的标签名的元素对象4、获取需要操作的元素,进⾏相应的操作 XML ⽂件:1 <?xml version="1.0" encoding="UTF-8"?>2 <books>3 <book sn="123">4 <name>Java</name>5 <price>9.9</price>6 <author>⽼张</author>7 </book>8 <book sn="456">9 <name>Python</name>10 <price>99.99</price>11 <author>⽼李</author>12 </book>13 </books> 测试解析⽂件:1 /*2 * dom4j 获取 Documet 对象3 */4 @Test5 public void getDocument() throws DocumentException {6 // 要创建⼀个 Document 对象,需要我们先创建⼀个 SAXReader 对象7 SAXReader reader = new SAXReader();8 // 这个对象⽤于读取 xml ⽂件,然后返回⼀个 Document。
dom4j基本操作
dom4j基本操作DOM4J与利⽤DOM、SAX、JAXP机制来解析xml相⽐,DOM4J 表现更优秀,具有性能优异、功能强⼤和极端易⽤使⽤的特点,只要懂得DOM基本概念,就可以通过dom4j的api⽂档来解析xml。
dom4j是⼀套开源的api。
实际项⽬中,往往选择dom4j来作为解析xml的利器。
针对于XML标准定义,对应于图2-1列出的内容,dom4j提供了以下实现:常⽤APIorg.dom4j.io.SAXReaderread 提供多种读取xml⽂件的⽅式,返回⼀个Domcument对象org.dom4j.Documentiterator 使⽤此法获取nodegetRootElement 获取根节点org.dom4j.NodegetName 获取node名字,例如获取根节点名称为bookstoregetNodeType 获取node类型常量值,例如获取到bookstore类型为1——ElementgetNodeTypeName 获取node类型名称,例如获取到的bookstore类型名称为Elementorg.dom4j.Elementattributes 返回该元素的属性列表attributeValue 根据传⼊的属性名获取属性值elementIterator 返回包含⼦元素的迭代器elements 返回包含⼦元素的列表org.dom4j.AttributegetName 获取属性名getValue 获取属性值org.dom4j.TextgetText 获取Text节点值org.dom4j.CDATAgetText 获取CDATA Section值mentgetText 获取注释下⾯做了⼀个类以如下的XML为例:<html><head><title>解析xml例⼦</title><script><username>yangrong</username><password>123456</password></script></head><body><result>0</result><form><banlce>1000</banlce><subID>36242519880716</subID></form></body></html>import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.List;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import .URL;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import com.alibaba.fastjson.JSON;public class OperateXml {@SuppressWarnings("unused")public static void main(String[] args) {// 下⾯是需要解析的xml字符串例⼦String xmlString = "<html><head><title>解析xml例⼦</title><script><username>yangrong</username><password>123456</password></script></head><body><result>0</result><form><banlce>1000</banlce><subID>36242519880716</ //主动创建document对象.Document document=DocumentHelper.createDocument();//建⽴document对象,⽤来操作xml⽂件Document testdoc=DocumentHelperreadStringXml(xmlString);//将⽂档或节点的XML转化为字符串.String docXmlText=testdoc.asXML();String teststring=Documentanalysis1(testdoc);System.out.print(teststring);}public static Document DocumentHelperreadStringXml(String xmlContent) {// DocumentHelper 解析xml字符串Document document = null;try {document = DocumentHelper.parseText(xmlContent);} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}return document;}public static Document SAXReaderreadStringXml(String xmlContent)throws DocumentException, UnsupportedEncodingException {/* SAXReader解析xml字符串 */Document document = null;try {// 读取输⼊流SAXReader saxReader = new SAXReader();document = saxReader.read(new ByteArrayInputStream(xmlContent.getBytes("utf-8")));// 字符串要根据相应的编码转成输⼊流才能被SAXReader读取。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DOM4j学习dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
在IBM develo perWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
如今你可以看到越来越多的J ava软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用d om4j。
这是必须使用的jar包,Hibernate用它来读写配置文件。
概念DOM4J是出品的一个开源XML解析包,它的网站中这样定义:Dom4j is an easy to use, open source library for working with XML, XP ath and XSLT on the Java platform using the Java Collections Framework a nd with full support for DOM, SAX and JAXP.Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。
它应用于Java 平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J使用起来非常简单。
只要你了解基本的XML-DOM模型,就能使用。
然而他自己带的指南只有短短一页(html),不过说的到挺全。
国内的中文资料很少。
因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。
之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。
(事实上DOM4J 的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。
在国内比较流行的是使用JDOM作为解析器,两者各擅其长,但DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。
大师不是说过么,“面向接口编程”。
目前使用DOM4J的已经越来越多。
如果你善于使用JDOM,不妨继续用下去,只看看本篇文章作为了解与比较,如果你正要采用一种解析器,不如就用DOM4J吧。
它的主要接口都在org.dom4j这个包里定义:Attribute Attribute定义了XML的属性Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuem nts)定义了一个公共的行为,CDATA CDATA 定义了XML CDATA 区域CharacterData CharacterData是一个标识借口,标识基于字符的节点。
如CD ATA,Comment, Text.Comment Comment 定义了XML注释的行为Document 定义了XML文档DocumentType DocumentType 定义XML DOCTYPE声明Element Element定义XML 元素ElementHandler ElementHandler定义了Element 对象的处理器ElementPath 被ElementHandler 使用,用于取得当前正在处理的路径层次信息Entity Entity定义XML entityNode Node为所有的dom4j中XML节点定义了多态行为NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(p redicate)ProcessingInstruction ProcessingInstruction 定义XML 处理指令.Text Text 定义XML 文本节点.Visitor Visitor 用于实现Visitor模式.XPath XPath 在分析一个字符串后会提供一个XPath 表达式看名字大致就知道它们的涵义如何了。
要想弄懂这套接口,关键的是要明白接口的继承关系: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.ProcessingInstruction一目了然,很多事情都清楚了。
大部分都是由Node继承来的。
知道这些关系,将来写程序就不会出现ClassCastException了。
使用简介下面给出一些例子(部分摘自DOM4J自带的文档),简单说一下如何使用。
1.读取并解析XML文档:读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXRea der两类不同方式,而调用方式是一样的。
这就是依靠接口的好处。
// 从文件读取XML,输入文件名,返回XML文档public Document read(String fileName) throws MalformedURLException, D ocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File(fileName));return document;}其中,reader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。
得到的Document对象就带表了整个XML。
根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。
如果遇到乱码问题,注意要把各处的编码名称保持一致即可。
2.取得Root节点读取后的第二步,就是得到Root节点。
熟悉XML的人都知道,一切XML分析都是从Root元素开始的。
public Element getRootElement(Document doc){return doc.getRootElement();}3.遍历XML树DOM4J提供至少3种遍历节点的方法:1) 枚举(Iterator)// 枚举所有子节点for ( Iterator i = root.elementIterator(); i.hasNext(); ) {Element element = (Element) i.next();// do something}// 枚举名称为foo的节点for ( Iterator i = root.elementIterator(foo); i.hasNext();) {Element foo = (Element) i.next();// do something}// 枚举属性for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {Attribute attribute = (Attribute) i.next();// do something}2)递归递归也可以采用Iterator作为枚举手段,但文档中提供了另外的做法public void treeWalk() {treeWalk(getRootElement());public void treeWalk(Element element) {for (int i = 0, size = element.nodeCount(); i < size; i++) {Node node = element.node(i);if (node instanceof Element) {treeWalk((Element) node);} else { // do something....}}}3) Visitor模式最令人兴奋的是DOM4J对Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。
了解设计模式的人都知道,Visitor是GOF设计模式之一。
其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。
我们来看D OM4J中的Visitor模式(快速文档中没有提供)只需要自定一个类实现Visitor接口即可。
public class MyVisitor extends VisitorSupport {public void visit(Element element){System.out.println(element.getName());}public void visit(Attribute attr){System.out.println(attr.getName());}}调用:root.accept(new MyVisitor())Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。
上面是给出的Element和Attribute的简单实现,一般比较常用的就是这两个。
VisitorSupport是DOM4J提供的默认适配器,Visitor接口的Default Adapter模式,这个模式给出了各种visit(*)的空实现,以便简化代码。
注意,这个Visitor是自动遍历所有子节点的。
如果是root.accept(MyVisitor),将遍历子节点。
我第一次用的时候,认为是需要自己遍历,便在递归中调用Visitor,结果可想而知。
4. XPath支持DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择。
public void bar(Document document) {List list = document.selectNodes( //foo/bar );Node node = document.selectSingleNode(//foo/bar/author);String name = node.valueOf( @name );例如,如果你想查找XHTML文档中所有的超链接,下面的代码可以实现:public void findLinks(Document document) throws DocumentException { List list = document.selectNodes( //a/@href );for (Iterator iter = list.iterator(); iter.hasNext(); ) {Attribute attribute = (Attribute) iter.next();String url = attribute.getValue();}}5. 字符串与XML的转换有时候经常要用到字符串转换为XML或反之,// XML转字符串Document document = ...;String text = document.asXML();// 字符串转XMLString text = <name>James</name> </person>;Document document = DocumentHelper.parseText(text);6 用XSLT转换XMLpublic Document styleDocument(Document document,String stylesheet) throws Exception {// load the transformer using JAXPTransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource( stylesheet ));// now lets style the given documentDocumentSource source = new DocumentSource( document ); DocumentResult result = new DocumentResult();transformer.transform( source, result );// return the transformed documentDocument transformedDoc = result.getDocument();return transformedDoc;}7. 创建XML一般创建XML是写文件前的工作,这就像StringBuffer一样容易。