`
javawill
  • 浏览: 13973 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Jdom解析嵌套XML<一>

    博客分类:
  • Java
阅读更多

本博文主要采用Jdom对XML 进行了详细的解析(包括了嵌套的XML、XML格式的字符串、XML文件以及XPATH的使用等等),基本能够满足了平时工作之中所遇到的所有解析XML 工作。


搭建Jdom 解析环境
        给项目添加资源jar包:jdom-2.0.1.jar
具体解析方法

        Jdom 的解析器(SAXBuilder)在org.jdom2.input.*这个包里,其中的DOMBuilder 的功能是将DOM 模型的Document解析成Jdom 模型的Document;SAXBuilder 的功能是从文件或者流中解析解析出符合JDOM模型的XML树。


①解析XML 文件的代码

 

// 创建一个 SAXBuilder
SAXBuilder saxBuilder = new SAXBuilder();

try {
// 给XML 文件构造一个Document
Document document = saxBuilder.build("resources/Classinfo.xml");

// 获取根元素
Element root = document.getRootElement();

} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}

 

②解析XML 字符串的代码

 

// 创建测试 XML
String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<class>"
+"<name>五年级</name>"
+"<teacher>张老师</teacher>"
+"<students>"
+"<student schoolNo=\"5001\"><name>小明</name><sex>男</sex></student>"
+"<student schoolNo=\"5002\"><name>小红</name><sex>女</sex></student>"
+"</students>"
+"</class>";

// 创建一个字符串的字符流
StringReader reader = new StringReader(xmlString);

// 创建新的输入源 SAX 解析将使用的InputSource 对象来读取 XML 
InputSource source = new InputSource(reader);

// 创建一个 SAXBuilder
SAXBuilder saxBuilder = new SAXBuilder();

try {
// 通过输入源构造一个Document
Document document = saxBuilder.build(source);

// 获取根元素
Element root = document.getRootElement();

} catch (JDOMException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

  PS:其实解析XML 格式的字符串就是解析XML 流!


Jdom的Element 对象常用的方法:

 

方  法 说  明
getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。
getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。
getChildText("childname") 返回指定子节点的内容文本值。
getText() 返回该元素的内容文本值。

 

完整解析代码

/**
 * Create by iflytekwill@qq.com in 2012-5-15
 */
package com.javawill.analysis;

import java.io.IOException;
import java.io.StringReader;
import java.util.Iterator;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.InputSource;

/**
 * 解析 XML 字符串类
 * @author <a href="mailto:iflytekwill@qq.com">WillKinG</a>
 * @version 1.0
 */
public class AnalysisXmlString {
	/**
	 * 解析方法
	 */
	public void analysis(){
		// 创建测试 XML
		String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
			+"<class>"
			+"<name>五年级</name>"
			+"<teacher>张老师</teacher>"
			+"<students>"
			+"<student schoolNo=\"5001\"><name>小明</name><sex>男</sex></student>"
			+"<student schoolNo=\"5002\"><name>小红</name><sex>女</sex></student>"
			+"</students>"
			+"</class>";
		
		// 创建一个字符串的字符流
		StringReader reader = new StringReader(xmlString);
		
		// 创建新的输入源 SAX 解析将使用的InputSource 对象来读取 XML 
		InputSource source = new InputSource(reader);
		
		// 创建一个 SAXBuilder
		SAXBuilder saxBuilder = new SAXBuilder();
		
		try {
			// 通过输入源构造一个Document
			Document document = saxBuilder.build(source);
			
			// 获取根元素
			Element root = document.getRootElement();
			
			// 获取Class 信息
			String clzName = root.getChildText("name");
			String clzTeacher = root.getChildText("teacher");
			System.out.println("Class Name:" + clzName + ";Class Teacher:" + clzTeacher);
			
			// 解析班级中的学生
			Element stuRoot = root.getChild("students");
			List list = stuRoot.getChildren("student");
			System.out.println("---- 班级共有" + list.size() + "名学生 ----");
			
			for (Iterator it = list.iterator(); it.hasNext();) {
				Element student = (Element) it.next();
				
				// 获取Student 信息
				String stuNo = student.getAttributeValue("schoolNo");
				
				String stuName = student.getChildText("name");
				String stuSex = student.getChildText("sex");
				
				System.out.println("Student No:" + stuNo + ";Student Name:" + stuName + ";Student Sex:" + stuSex);
			}
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 执行方法
	 * @param args
	 */
	public static void main(String[] args) {
		AnalysisXmlString analysisXml = new AnalysisXmlString();
		analysisXml.analysis();
	}
}

运行上面的代码,控制台返回值

Class Name:五年级;Class Teacher:张老师
---- 班级共有2名学生 ----
Student No:5001;Student Name:小明;Student Sex:男
Student No:5002;Student Name:小红;Student Sex:女
 

 

     小弟技术有限,第一次写技术博文,其中多有不合理的、错误的地方,还请各位大虾见谅指正。

1
1
分享到:
评论
4 楼 getianyu2008 2012-05-22  
StringReader reader = new StringReader(xmlString);
记住read.close();不然后期找这个问题可就难了。
3 楼 javawill 2012-05-22  
hesy_007 写道
jlcon 写道
还是dom4j比较好

嗯,推荐使用dom4j


恩恩,性能考虑,dom4j应该是首选。
2 楼 hesy_007 2012-05-22  
jlcon 写道
还是dom4j比较好

嗯,推荐使用dom4j
1 楼 jlcon 2012-05-22  
还是dom4j比较好

相关推荐

    jdom 读取XML 文件

    3. 解析复杂结构:对于嵌套的XML结构,你可以递归地遍历元素及其子元素,以便访问所有层级的数据。 4. 修改XML:除了读取,JDOM还允许我们修改XML。例如,添加新元素、删除元素或更改属性值: ```java // 添加...

    XML项目技术

    1. **所有元素都必须有关闭标签**:例如,在XML文件中定义一个班级的学生信息时,每个`&lt;学生&gt;`标签都必须有一个对应的关闭标签`&lt;/学生&gt;`。 ```xml &lt;班级&gt; &lt;学生&gt; &lt;学生姓名&gt;张珊&lt;/学生姓名&gt; &lt;学生性别&gt;男&lt;/学生...

    JDOM对XML文件的读取

    在Java编程中,JDOM(Java Document Object Model)是处理XML的一种流行库,它提供了方便的方式来创建、修改和解析XML文档。本篇文章将深入探讨JDOM库如何实现XML文件的读取操作。 首先,为了使用JDOM,我们需要在...

    利用JDOM解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...

    Xml做数据源模板显示新闻的源码.rar

    首先,XML文件通常包含一系列的元素,这些元素通过开始标签和结束标签定义,并且可以嵌套在一起形成层级结构。在新闻应用中,每个新闻条目可能对应一个XML元素,元素内部则包含标题、作者、发布日期和内容等子元素。...

    XML...枚举。。。注解

    JAXP、JDOM和DOM4J是Java中常用的XML解析库。在Android中,通常使用Pull解析器进行XML处理。 在实际应用中,例如,如果我们有一个描述多个学生信息的XML文件,如以下示例: ```xml &lt;students&gt; &lt;student id="1"&gt; ...

    jdom解析xml java发送post请求

    要使用JDOM解析XML,首先需要导入相关的库,例如: ```java import org.jdom2.Document; import org.jdom2.input.SAXBuilder; ``` 然后,你可以使用以下代码解析XML文件: ```java SAXBuilder builder = new ...

    利用jdom操作xml文档

    - **Element**:代表 XML 中的一个元素,例如 `&lt;name&gt;` 或 `&lt;contact&gt;`。 - **Attribute**:表示元素的一个属性,如 `&lt;sex value="male"/&gt;` 中的 `value`。 - **Document**:表示整个 XML 文档,包含一个根元素。 - ...

    jdom处理xml例子

    **JDOM解析XML** JDOM提供了两种解析XML的方式:SAXBuilder和DOMBuilder。SAXBuilder基于事件驱动,适合处理大型XML文档,而DOMBuilder则将整个XML文档加载到内存,适用于小型文档。 1. **SAXBuilder**:通过监听...

    xml编程实验报告_xml_学生成绩管理系统_xml管理系统_

    每个学生的信息可以被表示为一个XML元素,而这些元素再嵌套在更大的“学生成绩”元素中,形成层次化的数据结构。例如: ```xml &lt;students&gt; &lt;student&gt; &lt;name&gt;张三&lt;/name&gt; &lt;id&gt;001&lt;/id&gt; &lt;grades&gt; &lt;grade subject...

    xml解析工具类

    例如,如果XML中有`&lt;user&gt;`元素,其中包含`&lt;name&gt;`和`&lt;email&gt;`子元素,那么可以创建如下的User类: ```java public class User { private String name; private String email; // getters and setters... } `...

    支持多级的xml菜单(新)

    - 在XML文件中,每个菜单项通常由一个元素表示,例如`&lt;menu&gt;`,其中包含属性来定义菜单项的ID、文本、链接等信息。 - 多级结构通过嵌套元素实现,子菜单项作为父菜单项的子元素。例如,一级菜单是`&lt;menu&gt;`,二级...

    xml解析.doc

    XML文档通常包括一系列嵌套的标签,这些标签可以包含文本和其他标签。 #### 二、JDOM库介绍 JDOM(Java Document Object Model)是Java环境下用于处理XML文档的一种轻量级库。它提供了简单直观的API来读取、写入、...

    解析XML

    例如,Java中的DOM解析库JDOM,SAX解析库如XMLParser,以及更现代的StAX(流式API for XML)。这些库提供了方便的API,使得开发人员能轻松地解析、创建和修改XML文档。 XML还有一系列与其相关的标准和技术,如XPath...

    xml修改读取

    XML文档由一系列元素组成,元素之间有嵌套关系,通过标签来定义数据类型。例如: ```xml &lt;book&gt; &lt;title&gt;Java编程思想&lt;/title&gt; &lt;author&gt;Bruce Eckel&lt;/author&gt; &lt;year&gt;2000&lt;/year&gt; &lt;/book&gt; ``` 在Java中,我们通常...

    java 解析 html

    此外,除了Jsoup,Java还有其他HTML解析库,如JDOM、DOM4J等,但它们主要针对XML,对HTML的支持可能不如Jsoup全面。在处理HTML时,需要注意HTML的不规范性,因为实际网页可能存在嵌套不正确、属性缺失等情况,Jsoup...

    解析XML--老师(解析,修改,删除,导出)

    1. **基础概念**:XML文件由一系列元素组成,每个元素都有开始标签和结束标签,如`&lt;element&gt;内容&lt;/element&gt;`。元素可以嵌套,属性可以附加在开始标签内提供额外信息。 2. **解析方式**: - **DOM解析**:将整个XML...

    JAVA递归DEMO

    // 使用JDOM解析XML recursiveXMLTraversal(document.getRootElement()); ``` 在这个DEMO中,`recursiveXMLTraversal`方法可能包含了对XML元素的进一步操作,例如提取属性、检查元素名称或者处理文本内容。递归...

    XML教程

    - 元素:XML文档的核心是元素,如`&lt;element&gt;内容&lt;/element&gt;`。 - 属性值必须用引号包围。 - 空元素用`&lt;element/&gt;`表示。 - XML文档的开头必须包含XML声明,如`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`。 - ...

Global site tag (gtag.js) - Google Analytics