XML总结

1 解析XML目的

  获取节点名、节点值、属性名、属性值

2 获取xml文件内容的四种解析方式

DOM SAX DOM4J JDOM
DOM、SAX :java 官方方式,不需要下载jar包
DOM4J、JDOM :第三方,需要网上下载jar包

3 DOM使用步骤

3.1 准备工作

1、创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf = DocumnetBuilderFactory.instance();
2、创建一个DocumentBuilder的对象
DocumentBuilder db = dbf.newDocumentBuilder();
3、通过DocumentBuilder对象的parse方法加载xml文件到当前项目
Document document = db.parse("*.xml");
其中2、3两步需要try...catch异常。

3.2 使用Dom解析xml文件的属性节点

在不知道节点属性的个数和属性名时
1、通过document.getElementByTagName("标签名")获得所有标签名的节点,得到一个NodeList集合
2、通过NodeList.getLength()获得集合长度,遍历集合
3、Node node = NodeList.item(index)获得里面的节点
4、通过NamedNodeMap attrs = node.getAttributes()获取所有属性集合
5、通过attrs.getLength()遍历集合,Node attr = atrrs.item(index)
6、attr.getNodeName()获得属性名,attr.getNodeValue()获取属性值


前提已经知道book节点有且只有1个id属性,将book节点进行强制类型转换,转换成element类型。
1、通过document.getElementByTagName("标签名")获得所有标签名的节点,得到一个NodeList集合
2、通过NodeList.getLength()获得集合长度,遍历集合
3、element book=(element)bookList.item(i);//强制转换为element类型
4、string attrValue = book.getAttribute("id");

ChildNodes.item(i).getFirstChild().getNOdeValue()和 ChildNodes.item(i).getTextContent()的区别 子节点中还包含其他子节点时,后者可以把子节点的值都显示出来。
getTextContent()获取节点中的text内容(即节点值).
getNodeType().............有text,element,attr三个
而Element如果要获取值,必须读取它的子节点,<name>content</name>认为content是namae的子节点;
两种方法:
getFirstChild().getNodeName();(获取子节点再获取值)
getTextContent();(获取content方法)

4 常用节点类型

Element(NodeType:1;NodeName:元素名称;NodeValue:null)
Attr(NodeType:2;NodeName:属性名称;NodeValue:属性值)
Text(NodeType:3;NodeName:#text;NodeValue:节点内容)
1.getFirstChild.getNodeValue():该节点下第一子节点的值
2.getTextContent() :该节点下包括后代节点里的文本内容

5 小结

基础方法:DOM(平台无关的官方解析方式)、SAX(基于事件驱动的解析方式)
扩展方法:JDOM、DOM4J(在基础的方法上扩展出的,只有在java中能够使用的解析方法)

DOM:一次性将整个xml文件加载到内存中,形成DOM树
优点:形成了树结构,直观好理解,代码更容易编写
解析过程中树结构保留在内存中,方便修改
缺点:当xml文件较大时,对内存消耗比较大,容易影响解析性能并造成内存溢出
SAX:逐条语句判断解析
优点:采用事件驱动模式,对内存消耗比较小
适用于只需要处理xml中数据时
缺点:不易编码
很难同时访问同一个xml中的多处不同数据

JDOM:仅使用具体类而不使用接口
API大量使用了Collections类

DOM4J:JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能
DOM4J使用接口和抽象基本类方法,是一个优秀的Java XML API
具有性能优异、灵活性好、功能强大和极端易使用的特点
是一个开放源代码的软件

原文地址:https://www.cnblogs.com/helloIT/p/5191744.html