您的位置:首页 > 编程语言 > Java开发

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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: