- XML解析分为树形解析(DOM)和流解析(SAX)两种形式。其中DOM解析是将整个XML文档全部读取到内存中,形成一棵树,进行管理,而SAX解析则是以数据流的形式,在读取XML文档时,逐次触发事件。
- DOM解析器的接口被W3C标准化,并且存放在org.w3c.dom包中
- DOM解析的过程:
1. 获取DocumentBuilderFactory 对象
2. 获取DocumentBuilder对象
3. 将待解析属于与DocumentBuilder对象进行绑定,获取Document对象
4. 调用Document对象的getDocumentElement方法,获取XML的根元素,然后进行解析
// 获取BuilderFactory,用于进一步获取Builder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取Builder对象,用于进一步获取Document对象
DocumentBuilder docBuilder = factory.newDocumentBuilder();
// 将待解析的XML内容放入Builder,获取一个Document对象
Document doc = docBuilder.parse(new File("src/test.xml"));
// 获取根元素
Element element = doc.getDocumentElement();
// 根据API进行实际的解析过程
System.out.println(element.getNodeName());
- 类以及相关API介绍
1. DocumentBuilderFactory: 一个工厂类,用于生成DocumentBuilder对象
一个静态方法:用于获取DocumentBuilderFactory实例
static DocumentBuilderFactory newInstance()
一个成员方法:获取DocumentBuilder对象
public DocumentBuilder newDocumentBuilder()
2. DocumentBuilder:解析构造器,用于将XML资源解析成DOM树
主要是parse方法:
public Document parse(File f): 解析文件
public Document parse(InputSource is):解析输入流
public Document parse(String uri):解析URI指定的资源
3. Document:表示DOM树
主要用到一个获取根元素的方法:
Element getDocumentElement()
4. Element:继承自Node类:
String getTagName(): 获取标签名称
String getAttribute(String name): 获取指定的属性值
5. Node:主要的一个基类:
NodeList getChildNodes() 获取所有的子元素节点
Node getLastChild() 获取最后一个子元素
Node getNexSibling() 获取下一个兄弟元素
Node getPreviousSibling() 获取前一个兄弟元素
Node getParentNode() 获取父元素
NamedNodeMap getAttributes() 获取所有的属性集合
String getNodeName() 获取节点的名称
6. NodeList: 是一个Node的集合
int getLength(): 获取集合长度
Node item(int index): 获取集合元素
7. NamedNodeMap:与NodeList基本相同
8. Text: 纯文本节点,是Node的一个子类
public String getData(): 获取节点内容