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语法区分大小写,要注意节点名和属性名的大小写。
- 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一样容易。