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运算。

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 和其它相关功能的详细信息。

java如何解析http请求返回的xml报文

java如何解析http请求返回的xml报文

java如何解析http请求返回的xml报⽂xml报⽂解析⽅法有很多种,此处采⽤dom4j的⽅法。

dom4j的jar包下载地址:https://dom4j.github.io/#1、request.getInputStream()和new SAXReader().read(输⼊流):返回的报⽂如下:<?xml version="1.0" encoding="UTF-8"?><CreateAccessKeyResponse> <CreateAccessKeyResult> <AccessKey> <UserName>aaa</UserName> <AccessKeyId>2019dfc6ab5fe433f10c</AccessKeyId> <Status>Active</Status> <IsPrimary>false</IsPrimary> <SecretAccessKey>a14aeb3ac35b835d5ec4507d5667a353c77ceedc</SecretAccessKey></AccessKey></CreateAccessKeyResult></CreateAccessKeyResponse>获取参数AccessKeyId的值:import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;HttpURLConnection conn = create_AccessKey(); //create_AccessKey为⾃⼰写的http请求⽅法// 从request中取得输⼊流InputStream inputStream = conn.getInputStream();// 读取输⼊流SAXReader reader = new SAXReader();Document document = reader.read(inputStream);// 得到xml根元素Element root = document.getRootElement();String AK = root.element("CreateAccessKeyResult").element("AccessKey").element("AccessKeyId").getTextTrim();System.out.println("AccessKeyId="+AK+"\n");2、⽤dom4j读取xml⽂件中的参数:public void readXml() throws DocumentException, FileNotFoundException, IOException {String xml =System.getProperty("user.dir")+File.separator+"src"+File.separator+"test"+File.separator+"java"+File.separator+"http"+File.separator+"config.xml"; File xmlFile = new File(xml);SAXReader reader = new SAXReader();try {Document document = reader.read(xmlFile);Element root = document.getRootElement();AK = root.element("ak").getTextTrim();SK = root.element("sk").getTextTrim();} catch (Exception e) {e.printStackTrace();}}config.xml的内容如下:<?xml version="1.0" encoding="UTF-8"?><configuration> <ak>0d34d3db4bab560d343c</ak> <sk>a52628cb22b5a12642dd907075df6996b4c8a7b1</sk></configuration>。

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"的节点。

JavaXML解析的四种方法(连载)

JavaXML解析的四种方法(连载)

JavaXML解析的四种⽅法(连载)1. xml简介 XML:指可扩展标记语⾔, Extensible Markup Language;类似HTML。

XML的设计宗旨是传输数据,⽽⾮显⽰数据。

⼀个xml⽂档实例:1 <?xml version="1.0" encoding="UTF-8"?>2 <company name="Tencent" address="深圳市南⼭区">3 <department deptNo="001" name="development">4 <employee id="devHead" position="minister">许刚</employee>5 <employee position="developer">⼯程师A</employee>6 </department>7 <department deptNo="002" name="education">8 <employee position="minister" telephone="1234567">申林</employee>9 <employee position="trainee">实习⽣A</employee>10 </department>11 </company> 第⼀⾏是 XML 声明。

它定义 XML 的版本 (1.0) 和所使⽤的编码. 下⼀⾏描述⽂档的根元素:<company>开始,该根元素具有2个属性“name”,"address"。

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();}}。

读写XML的四种方法

读写XML的四种方法

读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。

它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。

在读写和处理XML数据时,有许多方法可供选择。

本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。

1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。

在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。

读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。

写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。

使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。

- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。

- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。

- 通过Document对象的方法遍历和操作XML文档的节点。

使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。

- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。

- 使用DocumentBuilder对象创建一个Document对象。

- 通过Document对象的方法创建和添加元素节点、属性节点等。

- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。

DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Dom4j遍历解析XML测试近来老和XML打交道,不深挖不行了。

这是一个Dom4j解析XML的例子,为做复杂递归处理前期所写的例子。

涵盖了XML的解析方面大部分核心API。

环境:Dom4j-1.6.1Dom4j解析需要XML需要的最小类库为:dom4j-1.6.1.jarjaxen-1.1-beta-6.jar目标:解析一个xml,输出所有的属性和元素值。

测试代码:XML文件:<?xml version="1.0"encoding="GBK"?><doc><person id="1"sex="m"><name>zhangsan</name><age>32</age><adds><add code="home">home add</add><add code="com">com add</add></adds></person><person id="2"sex="w"><name>lisi</name><age>22</age><adds><add ID="22"id="23"code="home">home add</add><add ID="23"id="22"code="com">com add</add><add id="24"code="com">com add</add></adds></person></doc>解析代码:package com.topsoft.test;import org.dom4j.io.SAXReader;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.Node;import java.util.Iterator;import java.util.List;import java.io.InputStream;/*** Created by IntelliJ IDEA.<br>* <b>User</b>: leizhimin<br>* <b>Date</b>: 2008-3-26 15:53:51<br>* <b>Note</b>: Dom4j遍历解析XML测试*/public class TestDom4j {/*** 获取指定xml文档的Docum ent对象,xml文件必须在classpath中可以找到** @param xmlFilePath xml文件路径* @return Document对象*/public static Docum ent parse2Document(String xmlFilePath) {SAXReader reader = new SAXReader();Docum ent docum ent = null;try {InputStream in =TestDom4j.class.getResourceAsStream(xmlFilePath); docum ent =reader.read(in);} catch (Docum entException e) {System.out.println(e.getMessage());System.out.println("读取classpath下xmlFileName文件发生异常,请检查CL ASSPATH和文件名是否存在!");e.printStackTrace();}return docum ent;}public static void testParseXMLData(String xmlFileName) {//产生一个解析器对象SAXReader reader = new SAXReader();//将xml文档转换为Docum ent的对象Docum ent docum ent =parse2Docum ent(xmlFileNam e);//获取文档的根元素Elem ent root =docum ent.getRootElement();//定义个保存输出xml数据的缓冲字符串对象StringBuffer sb = new StringBuffer();sb.append("通过Dom4j解析XML,并输出数据:\n");sb.append(xmlFileName + "\n");sb.append("----------------遍历start----------------\n");//遍历当前元素(在此是根元素)的子元素for (Iterator i_pe = root.elem entIterator(); i_pe.hasNext();) {Elem ent e_pe =(Element) i_pe.next();//获取当前元素的名字String person =e_pe.getName();//获取当前元素的id和sex属性的值并分别赋给id,sex变量String id = e_pe.attributeValue("id");String sex =e_pe.attributeValue("sex");String name =e_pe.element("name").getText();String age =e_pe.element("age").getText();//将数据存放到缓冲区字符串对象中sb.append(person + ":\n");sb.append("\tid=" + id + " sex=" + sex + "\n");sb.append("\t" + "name=" +name + " age=" +age + "\n");//获取当前元素e_pe(在此是person元素)下的子元素addsElem ent e_adds =e_pe.element("adds");sb.append("\t" + e_adds.getName() + "\n");//遍历当前元素e_adds(在此是adds元素)的子元素for (Iterator i_adds =e_adds.elementIterator(); i_adds.hasNext();) { Elem ent e_add = (Element) i_adds.next();String code =e_add.attributeValue("code");String add =e_add.getTextTrim();sb.append("\t\t" +e_add.getName() + ":" +" code=" +code + " va lue=\"" + add + "\"\n");}sb.append("\n");}sb.append("-----------------遍历end-----------------\n");System.out.println(sb.toString());System.out.println("---------通过XPath获取一个元素----------");Node node1 =document.selectSingleNode("/doc/person");System.out.println("输出节点:" +"\t"+node1.asXML());Node node2 =document.selectSingleNode("/doc/person/@sex");System.out.println("输出节点:" +"\t"+node2.asXML());Node node3 =document.selectSingleNode("/doc/person[name=\"zhangsan \"]/age");System.out.println("输出节点:" +"\t"+node3.asXML());System.out.println("\n---------XPath获取List节点测试------------");List list =docum ent.selectNodes("/doc/person[name=\"zhangsan\"]/adds/ add");for(Iterator it=list.iterator();it.hasNext();){Node nodex=(Node)it.next();System.out.println(nodex.asXML());}System.out.println("\n---------通过ID获取元素的测试----------");System.out.println("陷阱:通过ID获取,元素ID属性名必须为“大写ID”,小写的“i d”会认为是普通属性!");String id22 =document.elementByID("22").asXML();String id23 =document.elementByID("23").asXML();String id24 = null;if (docum ent.elem entByID("24") != null) {id24 =docum ent.elem entByID("24").asXML();} else {id24 ="null";}System.out.println("id22= " +id22);System.out.println("id23= " +id23);System.out.println("id24= " +id24);}public static void m ain(String args[]) {testParseXMLData("/person.xml");}}运行结果:通过Dom4j解析XML,并输出数据:/person.xml----------------遍历start---------------- person:id=1 sex=mnam e=zhangsan age=32addsadd: code=hom e value="home add"add: code=com value="com add"person:id=2 sex=wnam e=lisi age=22addsadd: code=hom e value="home add"add: code=com value="com add"add: code=com value="com add"-----------------遍历end--------------------------通过XPath获取一个元素----------输出节点: <person id="1"sex="m"><name>zhangsan</name><age>32</age><adds><add code="home">home add</add><add code="com">com add</add> </adds></person>输出节点: sex="m"输出节点: <age>32</age>---------XPath获取List节点测试------------<add code="home">home add</add><add code="com">com add</add>---------通过ID获取元素的测试----------陷阱:通过ID获取,元素ID属性名必须为“大写ID”,小写的“id”会认为是普通属性!id22= <add ID="22"id="23"code="home">home add</add>id23= <add ID="23"id="22"code="com">com add</add>id24= nullProcess finished with exit code 0发个Idea7开发界面截图: 点击图片放大想从头了解dom4j的朋友可以看dom4j文档中的quick start,这个是E文版的,另外有热心的网友已经将自己翻译的中文版奉献出来了,可以看看下面内容DOM4J是出品的一个开源XML解析包,它的网站中这样定义:Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。

相关文档
最新文档