一、XML简介 XML(eXtensible Markup Language) 即 可扩展标记语言 。提供了一套跨平台、跨网络、跨程序的语言的数据描述方式,使用 XML 可以方便地实现数据交换、系统配置、内容管理等常见功能。
二、XML简单示例<?xml version='1.0' encoding="UTF-8">
<student>
<name id="1">hoiyook</name>
<sex>女</sex>
<age>21</age>
</student>
//这是一个简单的XML文件
弄清几个概念:
元素 VS 节点 节点包括元素节点、属性节点、文本节点 元素一定是节点,节点不一定是元素
以上面的XML简单示例为例 —————————————— 1. name、sex、age属于元素节点 —————————————— 2. id="1"属于属性节点 ___________________________________ 3. hoiyook、女、21属于文本节点 ___________________________________
三、DOM方式解析XML
DOM 方式解析 XML 原理:基于dom解析方式,把整个xml文档加载到内容,转成dom树,因此应用程序可以随机的访问dom树的任何数据。 优点:灵活性强,速度快。 缺点:消耗资源比较多。(XML大时消耗大,因此,DOM方式解析XML不适合用于大的XML)
DOM方式解析XML示例:
DOM01:准备一个student.xml文件放在src文件下
<?xml version="1.0" encoding="UTF-8"?>
<student id="001"aa="xx">
<name>张三</name>
<sex>男</sex>
<age>20</age>
</student>
代码部分
public class DOM01 {
public static voidmain(String[] args) {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder= factory.newDocumentBuilder();
Document doc=builder.parse("src/student.xml");
NodeList nodeList = doc.getElementsByTagName("student");
Element e=(Element)nodeList.item(0);
System.out.println("姓名:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println("性别:"+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue());
System.out.println("年龄:"+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
} catch(Exception e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
}
输出结果:
姓名:张三
性别:男
年龄:20
DOM02:准备一个students.xml文件放在src文件下
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<name xx="哈哈">张三</name>
<sex>男</sex>
<age>20</age>
</student>
<student id="002">
<name >李四</name>
<sex>女</sex>
<age>20</age>
</student>
</students>
代码部分:
public class DOM02 {
public static voidprintNodeAttr(Node node){
NamedNodeMap namedNodeMap=node.getAttributes();
for(int i=0;i<namedNodeMap.getLength();i++){
Node attrNode = namedNodeMap.item(i);
System.out.println(attrNode.getNodeName()+":"+attrNode.getFirstChild().getNodeValue());
}
}
public static voidmain(String[] args) {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder= factory.newDocumentBuilder();
Document doc=builder.parse("src/students.xml");
NodeList nodeList = doc.getElementsByTagName("students");
Element element=(Element)nodeList.item(0);
NodeList studentsNodeList = element.getElementsByTagName("student");
for(int i=0;i<studentsNodeList.getLength();i++){
Element e=(Element)studentsNodeList.item(i);
System.out.println("姓名:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
printNodeAttr(e.getElementsByTagName("name").item(0));
System.out.println("性别:"+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue());
System.out.println("年龄:"+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
System.out.println("===================");
}
} catch(Exception e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
}
输出结果:
姓名:张三 xx:哈哈 性别:男 年龄:20 =================== 姓名:李四 性别:女 年龄:20 ===================
四、SAX方式解析XML SAX 的工作原理:简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结 束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。 优点:消耗资源比较少;适合大文件解析; 缺点:只能读取不能修改;开发复杂; SAX方式解析XML示例:
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈没写~~
五:Java操作XML (JDOM&DOM4J)
待续...
|