Java 解析 XML
标签: Java基础
XML解析技术有两种 DOM
SAX
- DOM方式
依据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象
- 长处: 便于实现
增
删
改
查
- 缺点: XML文件过大可能造成内存溢出
- 长处: 便于实现
- SAX方式
採用事件驱动模型边读边解析:从上到下一行行解析,解析到某一元素, 调用对应解析方法
- 长处: 不会造成内存溢出,
- 缺点: 查询不方便,但不能实现
增
删
改
不同的公司和组织提供了针对DOM和SAX两种方式的解析器
- SUN的
jaxp
- Dom4j组织的
dom4j
(最经常使用:如Spring) - JDom组织的
jdom
关于这三种解析器渊源能够參考java解析xml文件四种方式.
JAXP 解析
JAXP是JavaSE的一部分,在javax.xml.parsers
包下,分别针对dom与sax提供了例如以下解析器:
- Dom
DocumentBuilder
DocumentBuilderFactory
- SAX
SAXParser
SAXParserFactory
演示样例XML例如以下,以下我们会使用JAXP对他进行增
删
改
查
操作
- config.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans SYSTEM "constraint.dtd">
<beans>
<bean id="id1" class="com.fq.domain.Bean">
<property name="isUsed" value="true"/>
</bean>
<bean id="id2" class="com.fq.domain.ComplexBean">
<property name="refBean" ref="id1"/>
</bean>
</beans>
- constraint.dtd
<!ELEMENT beans (bean*) >
<!ELEMENT bean (property*)>
<!ATTLIST bean
id CDATA #REQUIRED
class CDATA #REQUIRED
>
<!ELEMENT property EMPTY>
<!ATTLIST property
name CDATA #REQUIRED
value CDATA #IMPLIED
ref CDATA #IMPLIED>
JAXP-Dom
/**
* @author jifang
* @since 16/1/13下午11:24.
*/
public class XmlRead {
@Test
public void client() throws ParserConfigurationException, IOException, SAXException {
// 生成一个Dom解析器
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// 解析XML文件
Document document = builder.parse(ClassLoader.getSystemResourceAsStream("config.xml"));
// ...
}
}
DocumentBuilder
的parse(String/File/InputSource/InputStream param)
方法能够将一个XML文件解析为一个
交换元素,使两数组之和的差最小 【微软面试100题 第三十二题】
在从1到n的正数中1出现的次数 【微软面试100题 第三十题】
栈的push、pop序列 【微软面试100题 第二十九题】
整数的二进制表示中1的个数 【微软面试100题 第二十八题】
跳台阶问题 【微软面试100题 第二十七题】
左旋转字符串 【微软面试100题 第二十六题】
字符串中找出最长的数字串 【微软面试100题 第二十五题】
合并链表 【微软面试100题 第二十四题】
计算圆形是否和正方形相交 【微软面试100题 第二十三题】