apache.commoms.digester3 解析xml文件
1 简介
java解析xml,就个人所知有3种方法DOM、SAX和Digester。前两种需要编写大量代码,且不利于代码移植和复用;
Digester解析xml又有两种方式,代码和xmlrule。xmlrule方式读取规定格式的xml解析规则文件,将标签和属性值赋值到指定的Java POJO对象。
2 待解析的xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml-stylesheet type="text/xsl" href="uhhe.xsl"?> <GEOBOUND> <GEOPT X="1" Y="1" Z="1"> <X SIZE="1" TYPE="5">10.00000000</X> <Y SIZE="1" TYPE="5">10.00000000</Y> <Z SIZE="1" TYPE="5">10.00000000</Z> </GEOPT> <GEOPT X="1" Y="1" Z="1"> <X SIZE="1" TYPE="5">20.00000000</X> <Y SIZE="1" TYPE="5">20.00000000</Y> <Z SIZE="1" TYPE="5">20.00000000</Z> </GEOPT> <GEOPT X="1" Y="1" Z="1"> <X SIZE="1" TYPE="5">30.00000000</X> <Y SIZE="1" TYPE="5">30.00000000</Y> <Z SIZE="1" TYPE="5">30.00000000</Z> </GEOPT> <GEOPT X="1" Y="1" Z="1"> <X SIZE="1" TYPE="5">40.00000000</X> <Y SIZE="1" TYPE="5">40.00000000</Y> <Z SIZE="1" TYPE="5">40.00000000</Z> </GEOPT> </GEOBOUND>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
3 解析规则文件
<?xml version='1.0'?>
<!DOCTYPE digester-rules PUBLIC
"-//Apache Commons //DTD digester-rules XML V1.0//EN"
"http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
<digester-rules>
<pattern value="GEOBOUND">
<object-create-rule classname="xml.digester.Bound" /> <!-- 创建对象 -->
<set-properties-rule /> <!-- 设置属性 -->
<pattern value="GEOPT">
<object-create-rule classname="xml.digester.GeoPt" /> <!-- 创建对象 -->
<bean-property-setter-rule pattern="X" propertyname="dX"/>
<bean-property-setter-rule pattern="Y" propertyname="dY"/>
<bean-property-setter-rule pattern="Z" propertyname="dZ"/>
<set-next-rule methodname="addPt" paramtype="xml.digester.GeoPt"/>
</pattern>
</pattern>
</digester-rules>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
4 存贮解析结果的Java POJO
package xml.digester;
import java.util.Vector;
public class Bound{
private Vector<GeoPt> pts = new Vector<GeoPt>();
public void addPt(GeoPt pt){
pts.add(pt);
}
public Vector<GeoPt> getPt(){
return pts;
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
package xml.digester;
public class GeoPt{
public double dX;
public double dY;
public double dZ;
public double getdX() {
return dX;
}
public void setdX(double dX) {
this.dX = dX;
}
public double getdY() {
return dY;
}
public void setdY(double dY) {
this.dY = dY;
}
public double getdZ() {
return dZ;
}
public void setdZ(double dZ) {
this.dZ = dZ;
}
}
注意:
类成员变量名不可为X、Y、Z,否则digester报错,原因不明。
- 可以先定义成员变量,然后用MyEclipse工具“生成setter和getter函数”
5 xmlrule文件加载类
package xml.digester;
import java.io.File;
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
public class myRulesLoader extends FromXmlRulesModule
{
private String xmlrule;
public myRulesLoader(String xmlfile){
xmlrule = xmlfile;
}
@Override
protected void loadRules()
{
loadXMLRules( new File( xmlrule ) );
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
6 运行示例
public static void main(String[] args){
try {
// 加载xmlrule文件
DigesterLoader loader = newLoader(new myRulesLoader("d:\\drule3.xml"));
// 创建Digester实例
Digester digester = loader.newDigester();
// 解析xml文件
FileInfo info = (FileInfo) digester.parse(new File("d:\\9.xml"));
// 分析解析结果
info.show();
}
catch (Exception e){
e.printStackTrace();
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
7 结果示意
...
Name: Band_1KM_Emissive
Fname: G:\YX\HDF_NC_H5\MOD021KM.A2009345.0400.005.2010257180913.hdf
Description: 1KM Emissive Band Numbers for Subsetting
NS: 16
NL: 1
NB: 1
FileType: HDF4
DataType: FLOAT
Satellite: null
Sensor: null
picPath:
xyz: 0.00.00.0
xyz: 0.00.00.0
xyz: 0.00.00.0
xyz: 0.00.00.0
...
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
apache.commoms.digester3 解析xml文件的更多相关文章
- 深入浅出如何解析xml文件---下篇
在上篇博文中,小编主要介绍xml的两种解析方式,分别是dom4j和dom,今天这篇博文,小编主要来简单介绍一下xml的其她两种解析方式sax和jdom. sax解析xml文件 sax,全称是Simp ...
- Java--Dom解析XML文件
之前写过几篇关于Java中解析XML文件的方法,不过,感觉不够简单,今天重写了一遍代码,用到的是方法是Dom,其中加入了日志记录功能--Log4j. 好了,不多说了,先把XMl ...
- Android程序解析XML文件的方法及使用PULL解析XML案例
一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- dom4j如何解析XML文件
最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~ 首先说:dom4j是一个java的XML ...
随机推荐
- Openjudge-计算概论(A)-求特殊自然数
描述: 一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反.编程求此自然数,并输出显示. 输入为1时,输出此自然数的十进制表达式:输入为2时,输出此自然数的 ...
- spring容器启动的加载过程(一)
使用spring,我们在web.xml都会配置ContextLoaderListener <listener> <listener-class> org.springframe ...
- UI弹出键盘和收回键盘
点击textfield,会自动弹出键盘 要让键盘收回来,先设置个代理:[field setTextFieldDelegate:self]; 可设置成自己,也可设置成其他对象,只要在对应的类中,遵循U ...
- Github 修正上传时“this exceeds GitHub’s file size limit of 100 MB”错误
自己的项目的版本控制用的是Git,代码仓库在github托管.项目里用到了IJKMediaFramework 想把代码push到github上,结果出错了,被拒绝,具体信息是: Total 324 ( ...
- zend guard Optimizer
zend guard Optimizer PHP5.3+ URL:http://www.zend.com/en/products/guard/downloads Email:test001@test0 ...
- css样式表及属性
CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/ 此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控 ...
- vmware虚拟机如何安装ubuntu14.10系统
vmware虚拟机安装ubuntu14.10系统安装步骤如下:
- linux配置永久ip不生效解决方法
本文原文来自 http://blog.csdn.net/zymx14/article/details/51472239 linux下使用ifconfig eth0 ip地址可以设置ip地址 ,命令为: ...
- 在64位Win7操作系统中安装Microsoft Access Engine的解决方案
在64位Win7操作系统中安装Microsoft Access Engine的解决方案 现在的Win7系统中安装的一般都是32位的Office,因为微软推荐使用32位的Office,兼容性更强,稳定性 ...
- zendstudio 安装 手册
安装 http://jingyan.baidu.com/article/b907e627b14fbb46e6891c65.html 选择baidu官方32bit安装 补丁破解网址 http://dwt ...