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是一个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报⽂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方法是一种用于在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解析的四种⽅法(连载)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是一个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读写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(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文档。
xml文件解析方法
xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。
在处理XML文件时,解析是必不可少的环节。
本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。
一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。
DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。
DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。
1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。
2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。
3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。
4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。
二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。
在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。
相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。
1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。
2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。
c解析xml常用方法
c解析xml常用方法解析XML是指将XML文档中的数据提取与分析的过程。
XML是一种标记语言,用于描述数据的结构与内容。
常用的XML解析方法包括DOM、SAX和StAX。
DOM解析:DOM(Document Object Model)是一种将XML文档表示为文档树的解析方法。
DOM解析将整个XML文档加载到内存中,并构建一个树形结构,可以方便地对XML文档进行遍历和操作。
常用的DOM解析类包括DocumentBuilder和Document类。
1.创建DOM解析器:```javaDocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(;DocumentBuilder builder = factory.newDocumentBuilder(;```2.加载XML文档:```javaDocument document = builder.parse(new File("file.xml")); //通过文件Document document = builder.parse(inputStream); //通过输入流Document document = builder.parse(url); //通过URL```3.获取根节点:```javaElement rootElement = document.getDocumentElement(;```4.遍历子节点:```javaNodeList nodeList = rootElement.getChildNodes(;for (int i = 0; i < nodeList.getLength(; i++)Node node = nodeList.item(i);if (node.getNodeType( == Node.ELEMENT_NODE)Element element = (Element) node;//处理子节点}```SAX解析:SAX(Simple API for XML)是一种基于事件驱动的解析方法。
详解PHP使用DOMDocument类遍历_增加_修改_删除XML节点操作
详解PHP使用DOMDocument类遍历_增加_修改_删除XML节点操作DOMDocument类是PHP中用来处理XML文档的类,通过该类可以实现对XML文档的遍历、增加、修改和删除节点的操作。
一、遍历XML节点使用DOMDocument类可以很方便地遍历XML节点,以下是一个遍历XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//获取根节点$root = $dom->documentElement;//遍历根节点的所有子节点foreach ($root->childNodes as $node)//判断节点类型为元素节点if ($node->nodeType == XML_ELEMENT_NODE)//输出节点的名称和值echo $node->nodeName . ': ' . $node->nodeValue . PHP_EOL;}```二、增加XML节点使用DOMDocument类可以很方便地增加XML节点,以下是一个增加XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//创建节点$newNode = $dom->createElement('book');$attr = $dom->createAttribute('id');$attr->value = '3';$newNode->appendChild($attr);$title = $dom->createElement('title', 'Title 3');$newNode->appendChild($title);$author = $dom->createElement('author', 'Author 3');$newNode->appendChild($author);$root = $dom->documentElement;//添加新节点到根节点$root->appendChild($newNode);//保存XML文档$dom->save('example.xml');```三、修改XML节点使用DOMDocument类可以很方便地修改XML节点,以下是一个修改XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//获取根节点$root = $dom->documentElement;// 获取指定id的节点$node = $dom->getElementById('1');$node->getElementsByTagName('title')->item(0)->nodeValue = 'New Title';//保存XML文档$dom->save('example.xml');```四、删除XML节点使用DOMDocument类可以很方便地删除XML节点,以下是一个删除XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//获取根节点$root = $dom->documentElement;// 获取指定id的节点$node = $dom->getElementById('1');//删除节点$root->removeChild($node);//保存XML文档$dom->save('example.xml');```以上就是PHP使用DOMDocument类进行XML节点操作的详细说明。
java xml格式返回报文解析
java xml格式返回报文解析Java中可以使用多种方式解析XML格式的返回报文,常见的方式有DOM解析、SAX解析以及基于XML绑定技术的解析。
每种方式都有不同的特点和适用场景,下面将详细介绍这三种解析方式。
1. DOM解析:DOM(Document Object Model)解析是将整个XML文档加载到内存中,构建成一个树形结构,并提供API来操作这个树。
DOM解析提供了许多API,可以通过节点遍历和搜索、属性读取和设置、节点创建和删除等方式来处理XML文档。
DOM解析适用于对XML文档进行多次读写操作,如增删改查等复杂的操作。
使用Java的DOM解析,可以通过以下几个步骤实现:1)使用DocumentBuilderFactory创建一个DocumentBuilder对象。
2)调用DocumentBuilder的parse方法,传入XML文件的输入流,将XML文档解析为一个Document对象。
3)通过Document对象可以获取XML文档的根元素,从而开始对XML文档进行遍历和操作。
DOM解析的优点是能够将整个XML文档加载到内存中,便于操作和修改。
但是对于较大的XML文件,DOM解析会消耗大量的内存空间。
2. SAX解析:SAX(Simple API for XML)解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发相应的事件,应用程序根据事件的发生来处理XML文档。
SAX解析的特点是速度快、内存消耗小,适用于对XML文档进行单次顺序读取的操作。
使用Java的SAX解析,可以通过以下几个步骤实现:1)定义一个继承自DefaultHandler的处理器类,重写相应的事件回调方法。
2)使用SAXParserFactory创建一个SAXParser对象。
3)调用SAXParser的parse方法,传入XML文件的输入流和处理器对象,开始解析XML文档。
SAX解析的优点是速度快,内存消耗小,适用于大型XML文件的解析。
DOM4j解析技术探究
< mpo e > e ly e
( ) 人 D M j P 所 在 的 jr , i p r og 1导 O 4AI a 包 即 m ot r.
d m4. o j ( ) 建 文 档 Do u n 对 象 2创 c me t 在 DO j I中 . 以使 用 D c me t le 类 或 M4 AP 可 o u nHep r
在 该 结 构 图 中 . it 就 是 访 问者 抽 象 类 . 这 个 V so ir 在
类 中 .为 该 对 象 结 构 中 的 C n rtE e n 的 每 一 个 类 o cee lme t
为 了添 加 该 指 令 节 点 . 以 利 用 D C m n 接 口中 可 OU et
的 a d rc sign t t n ) 法 。若 要 生 成 如 上 所 述 d Po es lsmci ( 方 n o 的 指 令 节 点 则 可 以 用 以 下 写 法 . 即 d ca d rc si o .d Po e s n
CD ATA
1e t Co m e ’x m nt
£ 一 ~。
口继 承 关 系
图1 O j D M4 ̄
sxdi r 置 解 析 器 . O j 会 使 用 J X a. v 设 re D M4 将 A P来 加 载 JX A P配 置 的 解 析 器 : 果 创 建 失 败 . 使 用 A le2 如 则 e rd f
作 用 。利 用 解 析 器 可 以对 X ML文 档 进 行 解 析 、 询 以 查 及 增 删 改 等 操 作
1 D OM4 解 析 器 简 介 i
X ML解 析器 提 供 了 A I P. 我们 的应 用 程序 可 以通 过
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的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
解析xml格式字符串标签数据的方法
解析xml格式字符串标签数据的方法XML格式字符串是一种常用的数据格式,它可以表示复杂的数据结构。
在处理XML格式字符串时,我们需要解析其中的标签数据,才能获取其中的内容。
下面是几种解析XML格式字符串标签数据的方法: 1. DOM解析:DOM是Document Object Model的缩写,它将XML 数据组织成一个树形结构,可以通过操作节点对象来访问和修改数据。
使用DOM解析XML格式字符串需要加载完整的XML文档到内存中,因此适合处理较小的XML数据,但对于大型XML数据,DOM解析可能会导致性能问题。
2. SAX解析:SAX是Simple API for XML的缩写,它是一种基于事件驱动的解析方式,可以在读取XML数据时逐个处理数据。
SAX解析对内存的要求非常低,适合处理大型XML数据,但由于它是基于事件驱动的,因此需要编写复杂的回调函数来处理数据。
3. XPath解析:XPath是一种查询语言,可以通过路径表达式来访问XML数据中的元素、属性等。
使用XPath解析XML格式字符串时,可以通过XPath表达式来获取特定的元素或属性的值,非常方便。
不过,XPath解析需要加载完整的XML文档到内存中,对于大型XML数据仍然存在性能问题。
4. XML解析器:除了DOM、SAX和XPath解析之外,还有一些XML 解析器可以用来解析XML格式字符串。
例如,Python中的ElementTree 模块提供了一种简单的解析方式,可以快速地访问和修改XML数据。
总之,在解析XML格式字符串时,需要根据实际的需求选择合适的解析方式。
如果对内存要求比较高,可以使用SAX解析;如果需要快速访问和修改XML数据,可以考虑使用XPath解析或XML解析器。
xml文件简单读取,循环遍历
xml⽂件简单读取,循环遍历xml⽂件的简单读取出来⽣成dom4j.Document对象树,循环遍历获取节点例⼦:import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dom4jText {/*** @param args*/public static void main(String[] args) {try {//创建解析器SAXReader saxReader=new SAXReader();//通过解析器将xml读取到内存中,⽣成对象树Document document=saxReader.read("conf/student.xml");//获取根节点Element root=document.getRootElement();//遍历根节点for(Iterator<Element> rootlter=root.elementIterator();rootlter.hasNext();){Element student=rootlter.next();for(Iterator<Element> innerlter=student.elementIterator();innerlter.hasNext();){Element innerElt=innerlter.next();String name=innerElt.getName();String value=innerElt.getStringValue();System.out.println("name========="+name+"======value========="+value);}System.out.println("-------------------------------");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}程序⽤到xml:<?xml version="1.0" encoding="UTF-8"?><students><student><name>张三</name><age>11</age><adress>浙江省是打发斯蒂芬⼆⼈11</adress></student><student><name>李四</name><age>22</age><adress>浙江省是打发斯蒂芬⼆⼈22</adress></student><student><name>王⼆⿇⼦</name><age>33</age><adress>浙江省是打发斯蒂芬⼆⼈33</adress></student></students>。
Java常见数据交换格式——xml、json、yaml
Java常见数据交换格式——xml、json、yaml⽬录数据交换格式 每⼀种编程语⾔都有不同的数据结构,在多个应⽤程序之间,如果编写每⼀个应⽤程序的编程语⾔都不同,那么他们的数据是不能直接传递的,需要将他们转换为特定的格式,然后再进⾏传输,保证发送⽅和接收⽅都能正确的读取数据。
另外,不同操作系统,不同平台之间实现数据共享,也需要将数据转换为两个平台或者操作系统都能读取的格式。
数据交换格式就是“应⽤程序间通信时使⽤的数据格式”,⽽常见的数据交换格式包括:XML、JSON、YAML。
下⾯就是⽤Java来实现上⾯这3种格式的操作。
XML xml(eXtensible Markup Language),可扩展标记语⾔,详细的介绍可以⾃⾏查阅。
⼀个标准的xml⽂件内容如下(⽰例⽂件名为books.xml):<?xml version="1.0" encoding="utf-8"?><books><book id="one"><name>Java加密与解密的艺术</name><price>89</price><language>Chinese</language><author>梁栋</author></book><book id="two"><name>Effective Java</name><price>59</price><language>English</language></book></books> 在xml中,有⼏个专业术语: 节点:⽐如上⾯的<books>、<book>、<name>、<price>、<language>、<author>; 节点值:⽐如"Effective Java" 是< name>节点的值; 属性:⽐如<book>节点的id属性; 属性值:<book>节点的id属性值分别为1、2. 注意,每⼀个节点都可以有⼦节点,⽐如<books>的⼦节点有<book>节点,⽽<book>的⼦节点包括<name>、<price>、<language>、<author>; 在使⽤Java来操作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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。