了解XML
什么是XML?
XML是Extensibe Markup Language的缩写,即可扩展标记语言,是一种简单的数据存储语言,使用一系列简单的标记来描述结构化数据。
XML的结构
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<PhoneInfo>
<Brand name="华为">
<Type name="P90">
<Item>
<title>标题信息</title>
<link>链接信息</link>
<pubDate>20xx-xx-xx</pubDate>
</Item>
</Type>
</Brand>
<Brand name="苹果">
<Type name="iPhone Z"/>
<Type name="iPhone ZL"/>
</Brand>
</PhoneInfo>
1,XML的声明
<?xml version="1.0" encoding="utf-8" standalone="no"?>表示XML的声明,用来标明此文件是一个XML文档。其中的version表示文档符合XML1.0规范;encoding表示文档字符集编码,默认为“UTF-8”;standalone表示该文件是否呼叫其它外部的文件。若值是 ”yes” 表示没有呼叫外部文件,若值是 ”no” 则表示有呼叫外部文件。默认值是 “yes”。 对于每一个xml文档,声明部分都是一样的。
2,标签
在XML 中,使用<>括起来的各种标签来标记数据。如:<author>作者</author>。 注意:HTML中的标签都是固定的,不能自己随意写,而XML中标签可以直接写。
3,元素
元素是XML文档中的主要部分。如:<title>标题信息</title>是一个元素。元素由三部分组成:开始标签、结束标签、元素内容。元素的命名规则如下: 1,名称中可以包含字母、数字或其他的字符。 2,名称中不能以数字或者标点符号开始。 3,名称不能以“xml”(Xml或XML)开始。 4,名称中不能包含空格。
4,根元素
每个XML文档必须有且仅有一个根元素。如:<PhoneInfo></PhoneInfo> <font size="3"> 根元素的特点如下: <font size="3"> 1,根元素是一个完全包含文档中国其他所有元素的元素。</font> <font size="3"> 2,根元素的起始标签要放在所有其他元素的起始标签之前。</font> <font size="3"> 3,根元素的结束标签要放在所有其他元素的结束标签之后。</font> </font>
5,属性
如上面的XML文档中,<Brand name="华为"></Brand>中的“name”就是属性,用来描述手机的品牌名称。属性使用双引号包裹的。
解析XML的概述
目前解析XML文档有四种方式。 1,DOM: DOM 是基于XML的树状结构来完成解析的,DOM解析XML时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用DOM API来操作这个树结构。DOM解析适用于多次访问XML的程序,一次性加载完,但是DOM解析比较浪费资源。 2,SAX: SAX是基于事件的解析,它是为了解决DOM 解析的资源消耗而出现的。SAX解析边读边加载,占用资源少。 3,JDOM: DOM是不针对语言的,而JDOM是这对Java的特定文档模型,它简化了与XML的交互并且使用DOM 更快。JDOM优势在于:使用20%的精力解决80%的Java问题。 4,DOM4J: DOM4J是一个非常优秀的JavaXML API,具有性能优异,功能强大和易用的特点,
DOM解析XML文档
使用DOM解析XML文档的步骤如下: 1,创建解析器工厂对象,即:DocumentBuilderFactory对象。 2,由解析器工厂对象创建解析器对象,即DocumentBuilder对象。 3,由解析器对象对指定的XML文件进行解析,构建相应的DOM树,创建Document对象。 4,以Document对象为起点对DOM树的节点进行增加、删除、修改、查询等操作。
package cn.test;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import java.io.IOException;
public class Test1 {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
//得到DOM解析器的工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//从DOM工厂得到DOM解析器
DocumentBuilder db=dbf.newDocumentBuilder();
//解析XML文档,得到一个Document对象,即DOM树
Document doc=db.parse("src\\phone.xml");
//得到所有的Brand节点列表信息
NodeList brandList = doc.getElementsByTagName("Brand");
//循环Brand信息
for(int i=0;i<brandList.getLength();i++){
//获取第i个元素,并且转化为Element元素
Element element=(Element) brandList.item(i);
//拿到第i个Brand元素的name属性值
String attrValue=element.getAttribute("name");
//获取当前元素的所有的Type元素
NodeList types=element.getElementsByTagName("Type");
for(int j=0;j<types.getLength();j++){
//先拿到子元素的节点
Element element1 = (Element)types.item(j);
String typeName =(element1.getAttribute("name"));
System.out.println("手机型号是:"+typeName);
}
}
}
}
运行结果如下:
手机型号是:P90
手机型号是:iPhone Z
手机型号是:iPhone ZL
使用DOM解析常用到的对象有:Node对象,NodeList对象,Document对象,Element对象。 Node对象:是DOM结构中最基本的对象,代表了文档树中的一个抽象节点。实际使用中很少使用Node对象,一般都是使用ELement对象。
NodeList对象:指包含了一个或者多个节点(Node)的列表。
Document对象:代表整个XML文档。
Element对象:代表XML文档中年的标签元素,继承自Node,也是Node最主要的子对象。