JAXP解析XML
1准备解析的xml文件
parseXML.xml
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<
states
>
<
north
>
<
state
>
Minnesota
</
state
>
<
state
>
Iowa
</
state
>
<
state
>
North Dakota
</
state
>
</
north
>
<
south
>
<
state
>
Texas
</
state
>
<
state
>
Oklahoma
</
state
>
<
state
>
Louisiana
</
state
>
</
south
>
<
east
>
<
state
>
New York
</
state
>
<
state
>
North Carolina
</
state
>
<
state
>
Massachusetts
</
state
>
</
east
>
<
west
>
<
state
>
California
</
state
>
<
state
>
Oregon
</
state
>
<
state
>
Nevada
</
state
>
</
west
>
</
states
>
2、解析文件
DomToXml.java
package
dom.test;
import
java.io.
*
;
import
javax.xml.parsers.DocumentBuilder;
import
javax.xml.parsers.DocumentBuilderFactory;
import
javax.xml.parsers.ParserConfigurationException;
import
javax.xml.transform.Transformer;
import
javax.xml.transform.TransformerConfigurationException;
import
javax.xml.transform.TransformerException;
import
javax.xml.transform.TransformerFactory;
import
javax.xml.transform.dom.DOMSource;
import
javax.xml.transform.stream.StreamResult;
import
org.w3c.dom.Document;
import
org.w3c.dom.Element;
import
org.w3c.dom.Node;
import
org.w3c.dom.NodeList;
import
org.w3c.dom.Text;
import
org.xml.sax.SAXException;
/**
*
@author
windfree
*
*/
//
JAXP是java API for XML processing,几用于处理xml文档的java语言编程接口。
//
JAXP支持DOM、XSLT、SAX等标准
public
class
DomToXml {
public
static
DocumentBuilderFactory factory;
public
static
DocumentBuilder parser;
public
static
Document document;
public
static
TransformerFactory transformerFactory;
public
static
Transformer transform;
public
static
DOMSource domSource;
public
static
StreamResult streamResult;
public
static
void
main(String[] args) {
try
{
test();
}
catch
(SAXException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(IOException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
}
private
static
void
createNode() {
Element root
=
document.getDocumentElement();
Element firstNode
=
document.createElement(
"
other
"
);
root.appendChild(firstNode);
Text text
=
document.createTextNode(
"
test
"
);
Element nextNode
=
document.createElement(
"
state
"
);
nextNode.appendChild(text);
firstNode.appendChild(nextNode);
}
public
static
void
test()
throws
SAXException, IOException{
/*
DocumentBuilderFactory的静态方法newInstance创建了一个DocumentBuilderFactory实例,然后调用
newDocumentBuilder()方法创建一个DocumentBuilder对象
用DocumentBuilder的parse()方法就可以来解析xml文档并建立Dom模型。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 创建一个xml解析器
Document接口描述了对应于整个xml文档的对应树,提供对文档的访问。
DOM标准模型中并没有定义输出的接口,因而如果需要进行文档输出的话,
就需要用到JAXP的扩展,使用到XmlDocument。这儿有一个较为简便的方法,
就是用强制类型转换,把一个Document类转换成XmlDocument,然后,就可以使用XmlDocument的write()方法了
XmlDocument xdoc = (XmlDocument) document;
xdoc.write (System.out);
*/
//
获取一个xml解析器
factory
=
DocumentBuilderFactory.newInstance();
try
{
//
解析XML文件生成DOM文档的接口类,以便访问DOM
parser
=
factory.newDocumentBuilder();
document
=
parser.parse(
"
parseXML.xml
"
);
Element element
=
document.getDocumentElement();
System.out.println(element);
NodeList list
=
element.getChildNodes();
GetElement(list);//解析子节点
createNode();//向dom中插入节点,并写入xml中
}
catch
(ParserConfigurationException e) {
e.printStackTrace();
}
//
获得将DOM文档转化为xml的转换器
transformerFactory
=
TransformerFactory.newInstance();
//
下面调用JAXP的XSTL引擎来实现DOM树中的数据到xml文件的功能,XSTL的引擎输入为DOMSource对象,输出为StreamResult对象。
try
{
//
Transform相当于一个XSTL引擎,通常我们用它的处理XSL文件,
//
这里我们用它来输出xml文件
transform
=
transformerFactory.newTransformer();
//
创建一个DOMSource对象,参数为Document对象,该对象表现为转化成别的表达形式的信息容器。
domSource
=
new
DOMSource(document);
//
创建一个File对象,代表DOM Tree所包含的数据的输出介质,这是一个XML文件
//
创建一个StreamResult对象,该对象是将DOM对象文档转换为其他文档的容器,可以是一个xml文件,txt文件。
streamResult
=
new
StreamResult(
new
File(
"
test.xml
"
));
//
调用transform将DOM文件转换为xml文件
transform.transform(domSource, streamResult);
}
catch
(TransformerConfigurationException e) {
e.printStackTrace();
}
catch
(TransformerException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
}
private
static
void
GetElement(NodeList list) {
Node node;
int
i;
String str;
if
(list.getLength()
==
0
){
return
;
}
for
(i
=
0
;i
<
list.getLength();i
++
){
node
=
list.item(i);
if
(node.getNodeType()
==
1
){
//
Node类型对象
System.out.println(node.getNodeName());
GetElement(node.getChildNodes());
}
else
if
(node.getNodeType()
==
3
){
//
Text类型对象
str
=
node.getNodeValue();
if
(str.length()
>
0
){
System.out.println(str);
}
}
}
}
}
最近在学习ajax,在服务器解析xml文件,所以开始学JAXP和digester.
posted on 2006-12-11 08:58
windfree
阅读(707)
评论(0)
编辑
收藏
所属分类:
dom
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
js DOM基础
JAXP解析XML
windfree
学习学习再学习
导航
BlogJava
首页
新随笔
联系
聚合
管理
统计
随笔 - 10
文章 - 1
评论 - 4
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
■
ajax(3)
(rss)
■
dom(2)
(rss)
■
dwr(1)
(rss)
■
hibernate
(rss)
■
java(3)
(rss)
■
javascript(6)
(rss)
■
spring
(rss)
随笔档案
■
2008年2月 (1)
■
2007年1月 (1)
■
2006年12月 (9)
文章分类
■
dwr
(rss)
相册
■
java
搜索
最新评论
1. re: java元数据的学习
本草药王
--得到
2. re: java元数据的学习
看完了,试了下。终于有了些思路。谢谢BZ。
只是有些疑惑,我们什么时候能用到annotation呢?
--久城
3. re: java元数据的学习
学习了! 支持一下, 尤其是如何解析 Annotation 部分的代码. 受益了!
--BeanSoft
4. re: Digester学习笔记
blog不错...笔记很详细...学习ing
--小竹
阅读排行榜
1. 从Java 类产生json(json-lib)(7921)
2. java元数据的学习(1961)
3. DWR通过Annotation与spring整合(1380)
4. 正确使用prototype.js的Event.stopObserving方法(1178)
5. protoype.js学习之Ajax对象(三) (999)
评论排行榜
1. java元数据的学习(3)
2. Digester学习笔记(1)
3. protoype.js学习(一)(0)
4. JavaScript类的设计模式(0)
5. JAXP解析XML(0)