java解析xml:使用DOM
2010-11-02 17:54
696 查看
一.概要
用Java解析XML文档,最常用的有两种方式:使用基于事件的XML简单API(Smiple API for
XML)称为SAX和基于树和节点的文档对象模型(Document object Module)成为DOM。Sun公司提供了Java API
for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口
(2)org.xml.sax 用于对XML进行语法分析的事情驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
二.实例
1.所需xml
文件
Test.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
books
>
<
book
email
=
"zeh2007@126.com"
>
<
name
>
C++编程思想
</
name
>
<
price
>
60.0
</
price
>
</
book
>
</
books
>
students.xml
<?
xml
version
=
"1.0"
encoding
=
"gb2312"
?>
<?
xml
-stylesheet
type
=
"text/xsl"
href
=
"students.xsl"
?>
<
students
>
<
student
sn
=
"04378066"
>
<
name
>
ldz
</
name
>
<
age
>
23
</
age
>
</
student
>
<
student
sn
=
"04378069"
>
<
name
>
zeh
</
name
>
<
age
>
21
</
age
>
</
student
>
</
students
>
2.将xml
文件转化为dom
:
public
class
DOMConvert {
public
static
void
main(String[] args) {
//DOM
解析器的工厂实例
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try
{
//从DOM
工厂获得DOM
解析器
DocumentBuilder db=dbf.newDocumentBuilder();
//解析XML
文档的输入流,得到一个 Document
Document doc=db.parse(
new
File(
"xmlFil/students.xml
"
));
//建立一个XML
节点
Element eltStu=doc.createElement(
"student"
);
Element eltName=doc.createElement(
"name"
);
Element eltAge=doc.createElement(
"age"
);
Text textName=doc.createTextNode(
"yyr"
);
Text textAge=doc.createTextNode(
"22"
);
eltName.appendChild(textName);
eltAge.appendChild(textAge);
eltStu.appendChild(eltName);
eltStu.appendChild(eltAge);
eltStu.setAttribute(
"sn"
,
"04378072"
);
//将此节点插入根的孩子中
Element root=doc.getDocumentElement();
root.appendChild(eltStu);
//获取stuent标签节点
NodeList nl=root.getElementsByTagName(
"student"
);
//删除第一个节点
root.removeChild(nl.item(
0
));
//获取第一个节点
Element eltStuChg=(Element)nl.item(
0
);
//获取age标签节点
Node nodeAgeChg=eltStuChg.getElementsByTagName(
"age"
).item(
0
);
nodeAgeChg.getFirstChild().setNodeValue(
"20"
);
int
len=nl.getLength();
for
(
int
i=
0
;i
Element elt=(Element)nl.item(i);
System.out.println(
"编号:"
+ elt.getAttribute(
"sn"
));
Node nodeName=elt.getElementsByTagName(
"name"
).item(
0
);
Node nodeAge=elt.getElementsByTagName(
"age"
).item(
0
);
String name=nodeName.getFirstChild().getNodeValue();
String age=nodeAge.getFirstChild().getNodeValue();
System.out.println(
"姓名:"
+name);
System.out.println(
"年龄:"
+ age);
System.out.println(
"--------------------"
);
}
//实例化一个转换工厂
TransformerFactory tff=TransformerFactory.newInstance();
//获取一个转换实例
Transformer tf=tff.newTransformer();
//设置输出属性
tf.setOutputProperty(
"encoding"
,
"gb2312"
);
//根据Document对象新建一个DOM
数 据源
DOMSource source=
new
DOMSource(doc);
//定义输出流
StreamResult result=
new
StreamResult(
new
File(
"convert.xml
"
));
//从数据源转换至输出流
tf.transform(source,result);
}
catch
(ParserConfigurationException e) {
e.printStackTrace();
}
catch
(SAXException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
catch
(TransformerConfigurationException e) {
e.printStackTrace();
}
catch
(TransformerException e) {
e.printStackTrace();
}
}
}
用Java解析XML文档,最常用的有两种方式:使用基于事件的XML简单API(Smiple API for
XML)称为SAX和基于树和节点的文档对象模型(Document object Module)成为DOM。Sun公司提供了Java API
for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口
(2)org.xml.sax 用于对XML进行语法分析的事情驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
二.实例
1.所需xml
文件
Test.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
books
>
<
book
=
"zeh2007@126.com"
>
<
name
>
C++编程思想
</
name
>
<
price
>
60.0
</
price
>
</
book
>
</
books
>
students.xml
<?
xml
version
=
"1.0"
encoding
=
"gb2312"
?>
<?
xml
-stylesheet
type
=
"text/xsl"
href
=
"students.xsl"
?>
<
students
>
<
student
sn
=
"04378066"
>
<
name
>
ldz
</
name
>
<
age
>
23
</
age
>
</
student
>
<
student
sn
=
"04378069"
>
<
name
>
zeh
</
name
>
<
age
>
21
</
age
>
</
student
>
</
students
>
2.将xml
文件转化为dom
:
public
class
DOMConvert {
public
static
void
main(String[] args) {
//DOM
解析器的工厂实例
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try
{
//从DOM
工厂获得DOM
解析器
DocumentBuilder db=dbf.newDocumentBuilder();
//解析XML
文档的输入流,得到一个 Document
Document doc=db.parse(
new
File(
"xmlFil/students.xml
"
));
//建立一个XML
节点
Element eltStu=doc.createElement(
"student"
);
Element eltName=doc.createElement(
"name"
);
Element eltAge=doc.createElement(
"age"
);
Text textName=doc.createTextNode(
"yyr"
);
Text textAge=doc.createTextNode(
"22"
);
eltName.appendChild(textName);
eltAge.appendChild(textAge);
eltStu.appendChild(eltName);
eltStu.appendChild(eltAge);
eltStu.setAttribute(
"sn"
,
"04378072"
);
//将此节点插入根的孩子中
Element root=doc.getDocumentElement();
root.appendChild(eltStu);
//获取stuent标签节点
NodeList nl=root.getElementsByTagName(
"student"
);
//删除第一个节点
root.removeChild(nl.item(
0
));
//获取第一个节点
Element eltStuChg=(Element)nl.item(
0
);
//获取age标签节点
Node nodeAgeChg=eltStuChg.getElementsByTagName(
"age"
).item(
0
);
nodeAgeChg.getFirstChild().setNodeValue(
"20"
);
int
len=nl.getLength();
for
(
int
i=
0
;i
Element elt=(Element)nl.item(i);
System.out.println(
"编号:"
+ elt.getAttribute(
"sn"
));
Node nodeName=elt.getElementsByTagName(
"name"
).item(
0
);
Node nodeAge=elt.getElementsByTagName(
"age"
).item(
0
);
String name=nodeName.getFirstChild().getNodeValue();
String age=nodeAge.getFirstChild().getNodeValue();
System.out.println(
"姓名:"
+name);
System.out.println(
"年龄:"
+ age);
System.out.println(
"--------------------"
);
}
//实例化一个转换工厂
TransformerFactory tff=TransformerFactory.newInstance();
//获取一个转换实例
Transformer tf=tff.newTransformer();
//设置输出属性
tf.setOutputProperty(
"encoding"
,
"gb2312"
);
//根据Document对象新建一个DOM
数 据源
DOMSource source=
new
DOMSource(doc);
//定义输出流
StreamResult result=
new
StreamResult(
new
File(
"convert.xml
"
));
//从数据源转换至输出流
tf.transform(source,result);
}
catch
(ParserConfigurationException e) {
e.printStackTrace();
}
catch
(SAXException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
catch
(TransformerConfigurationException e) {
e.printStackTrace();
}
catch
(TransformerException e) {
e.printStackTrace();
}
}
}
相关文章推荐
- java使用jdom架包解析xml字符串dom原理并保存map对象
- Java&Xml教程(二)使用DOM方式解析XML文件
- Java使用Dom解析xml学习记录
- Java学习之路——使用DOM解析XML文档
- Java中使用DOM来解析xml文档
- Java&Xml教程(二)使用DOM方式解析XML文件
- Java乔晓松-使用SAX,DOM,pull解析XML文件以及pull解析生成xml文件
- Java中使用DOM方式解析和创建XML文档、及dom4j使用简介
- Java&Xml教程(二)使用DOM方式解析XML文件
- java中使用dom解析xml
- java学习笔记——使用DOM解析XML和使用SAX解析XML
- JAVA 使用 DOM 解析 XML
- Java中使用Dom和Sax两种思想解析XML
- Java使用DOM解析XML的文件属性名和属性值、节点名和节点值
- 在java中使用dom解析xml的示例分析
- XML的DOM解析 Java实现 使用递归解析一个XML文档
- 使用DOM解析XML文档示例(Java)
- JAVA使用DOM解析XML
- 【原创】使用DOM解析XML文档示例(Java)
- 【XML解析】(1)Java下使用JAXP中的DOM解析方式对XML文档进行解析