XML —— DOM方式解析XML
Posted cocoomg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML —— DOM方式解析XML相关的知识,希望对你有一定的参考价值。
1. DOM 方式解析 XML 原理
- 基于 DOM(Document Object Model,文档对象模型)解析方式,是把整个 XML 文档加载到内存,转化成 DOM 树,因此应用程序可以随机的访问 DOM 树的任何数据;
- 优点:灵活性强,速度快;
- 缺点:消耗资源比较多;
2. 元素 VS 节点 ( 节点包含元素 )
- 节点包括元素节点、属性节点、文本节点
<!-- students.xml -->
<?xml version="1.0" encoding="UTF-8"?> <students> <student> <name id="001" xx="哈哈">张三</name> <sex>男</sex> <age>20</age> </student> <student> <name id="002">李四</name> <sex>女</sex> <age>21</age> </student> </students> // 元素节点:student、name、sex、age // 属性节点:id、aa // 文本节点:张三、男、20 - 元素一定是节点,但是节点不一定是元素
3. DOM 方式解析 XML 示例
- 示例
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DOM02 { public static void printNodeAttr(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 void main(String[] args) { DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//获取工厂实例 try { DocumentBuilder builder=factory.newDocumentBuilder(); //通过Builder 解析 XML 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); //Element 是 Node 的一个子类,功能比 Node 多 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) { // TODO Auto-generated catch block e.printStackTrace(); } } }
以上是关于XML —— DOM方式解析XML的主要内容,如果未能解决你的问题,请参考以下文章