本博文主要采用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:女
小弟技术有限,第一次写技术博文,其中多有不合理的、错误的地方,还请各位大虾见谅指正。
分享到:
相关推荐
3. 解析复杂结构:对于嵌套的XML结构,你可以递归地遍历元素及其子元素,以便访问所有层级的数据。 4. 修改XML:除了读取,JDOM还允许我们修改XML。例如,添加新元素、删除元素或更改属性值: ```java // 添加...
1. **所有元素都必须有关闭标签**:例如,在XML文件中定义一个班级的学生信息时,每个`<学生>`标签都必须有一个对应的关闭标签`</学生>`。 ```xml <班级> <学生> <学生姓名>张珊</学生姓名> <学生性别>男</学生...
在Java编程中,JDOM(Java Document Object Model)是处理XML的一种流行库,它提供了方便的方式来创建、修改和解析XML文档。本篇文章将深入探讨JDOM库如何实现XML文件的读取操作。 首先,为了使用JDOM,我们需要在...
本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...
首先,XML文件通常包含一系列的元素,这些元素通过开始标签和结束标签定义,并且可以嵌套在一起形成层级结构。在新闻应用中,每个新闻条目可能对应一个XML元素,元素内部则包含标题、作者、发布日期和内容等子元素。...
JAXP、JDOM和DOM4J是Java中常用的XML解析库。在Android中,通常使用Pull解析器进行XML处理。 在实际应用中,例如,如果我们有一个描述多个学生信息的XML文件,如以下示例: ```xml <students> <student id="1"> ...
要使用JDOM解析XML,首先需要导入相关的库,例如: ```java import org.jdom2.Document; import org.jdom2.input.SAXBuilder; ``` 然后,你可以使用以下代码解析XML文件: ```java SAXBuilder builder = new ...
- **Element**:代表 XML 中的一个元素,例如 `<name>` 或 `<contact>`。 - **Attribute**:表示元素的一个属性,如 `<sex value="male"/>` 中的 `value`。 - **Document**:表示整个 XML 文档,包含一个根元素。 - ...
**JDOM解析XML** JDOM提供了两种解析XML的方式:SAXBuilder和DOMBuilder。SAXBuilder基于事件驱动,适合处理大型XML文档,而DOMBuilder则将整个XML文档加载到内存,适用于小型文档。 1. **SAXBuilder**:通过监听...
每个学生的信息可以被表示为一个XML元素,而这些元素再嵌套在更大的“学生成绩”元素中,形成层次化的数据结构。例如: ```xml <students> <student> <name>张三</name> <id>001</id> <grades> <grade subject...
例如,如果XML中有`<user>`元素,其中包含`<name>`和`<email>`子元素,那么可以创建如下的User类: ```java public class User { private String name; private String email; // getters and setters... } `...
- 在XML文件中,每个菜单项通常由一个元素表示,例如`<menu>`,其中包含属性来定义菜单项的ID、文本、链接等信息。 - 多级结构通过嵌套元素实现,子菜单项作为父菜单项的子元素。例如,一级菜单是`<menu>`,二级...
XML文档通常包括一系列嵌套的标签,这些标签可以包含文本和其他标签。 #### 二、JDOM库介绍 JDOM(Java Document Object Model)是Java环境下用于处理XML文档的一种轻量级库。它提供了简单直观的API来读取、写入、...
例如,Java中的DOM解析库JDOM,SAX解析库如XMLParser,以及更现代的StAX(流式API for XML)。这些库提供了方便的API,使得开发人员能轻松地解析、创建和修改XML文档。 XML还有一系列与其相关的标准和技术,如XPath...
XML文档由一系列元素组成,元素之间有嵌套关系,通过标签来定义数据类型。例如: ```xml <book> <title>Java编程思想</title> <author>Bruce Eckel</author> <year>2000</year> </book> ``` 在Java中,我们通常...
此外,除了Jsoup,Java还有其他HTML解析库,如JDOM、DOM4J等,但它们主要针对XML,对HTML的支持可能不如Jsoup全面。在处理HTML时,需要注意HTML的不规范性,因为实际网页可能存在嵌套不正确、属性缺失等情况,Jsoup...
1. **基础概念**:XML文件由一系列元素组成,每个元素都有开始标签和结束标签,如`<element>内容</element>`。元素可以嵌套,属性可以附加在开始标签内提供额外信息。 2. **解析方式**: - **DOM解析**:将整个XML...
// 使用JDOM解析XML recursiveXMLTraversal(document.getRootElement()); ``` 在这个DEMO中,`recursiveXMLTraversal`方法可能包含了对XML元素的进一步操作,例如提取属性、检查元素名称或者处理文本内容。递归...
- 元素:XML文档的核心是元素,如`<element>内容</element>`。 - 属性值必须用引号包围。 - 空元素用`<element/>`表示。 - XML文档的开头必须包含XML声明,如`<?xml version="1.0" encoding="UTF-8"?>`。 - ...