1 简介

java解析xml,就个人所知有3种方法DOM、SAX和Digester。前两种需要编写大量代码,且不利于代码移植和复用;

Digester解析xml又有两种方式,代码和xmlrule。xmlrule方式读取规定格式的xml解析规则文件,将标签和属性值赋值到指定的Java POJO对象。

2 待解析的xml文件

  1. <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
  2. <?xml-stylesheet type="text/xsl" href="uhhe.xsl"?>
  3. <GEOBOUND>
  4. <GEOPT X="1" Y="1" Z="1">
  5. <X SIZE="1" TYPE="5">10.00000000</X>
  6. <Y SIZE="1" TYPE="5">10.00000000</Y>
  7. <Z SIZE="1" TYPE="5">10.00000000</Z>
  8. </GEOPT>
  9. <GEOPT X="1" Y="1" Z="1">
  10. <X SIZE="1" TYPE="5">20.00000000</X>
  11. <Y SIZE="1" TYPE="5">20.00000000</Y>
  12. <Z SIZE="1" TYPE="5">20.00000000</Z>
  13. </GEOPT>
  14. <GEOPT X="1" Y="1" Z="1">
  15. <X SIZE="1" TYPE="5">30.00000000</X>
  16. <Y SIZE="1" TYPE="5">30.00000000</Y>
  17. <Z SIZE="1" TYPE="5">30.00000000</Z>
  18. </GEOPT>
  19. <GEOPT X="1" Y="1" Z="1">
  20. <X SIZE="1" TYPE="5">40.00000000</X>
  21. <Y SIZE="1" TYPE="5">40.00000000</Y>
  22. <Z SIZE="1" TYPE="5">40.00000000</Z>
  23. </GEOPT>
  24. </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 解析规则文件

  1. <?xml version='1.0'?>
  2. <!DOCTYPE digester-rules PUBLIC
  3. "-//Apache Commons //DTD digester-rules XML V1.0//EN"
  4. "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
  5. <digester-rules>
  6. <pattern value="GEOBOUND">
  7. <object-create-rule classname="xml.digester.Bound" /> <!-- 创建对象 -->
  8. <set-properties-rule /> <!-- 设置属性 -->
  9. <pattern value="GEOPT">
  10. <object-create-rule classname="xml.digester.GeoPt" /> <!-- 创建对象 -->
  11. <bean-property-setter-rule pattern="X" propertyname="dX"/>
  12. <bean-property-setter-rule pattern="Y" propertyname="dY"/>
  13. <bean-property-setter-rule pattern="Z" propertyname="dZ"/>
  14. <set-next-rule methodname="addPt" paramtype="xml.digester.GeoPt"/>
  15. </pattern>
  16. </pattern>
  17. </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

  1. package xml.digester;
  2. import java.util.Vector;
  3. public class Bound{
  4. private Vector<GeoPt> pts = new Vector<GeoPt>();
  5. public void addPt(GeoPt pt){
  6. pts.add(pt);
  7. }
  8. public Vector<GeoPt> getPt(){
  9. return pts;
  10. }
  11. }

.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; }

  1. package xml.digester;
  2.  
  3. public class GeoPt{
  4.  
  5. public double dX;
  6. public double dY;
  7. public double dZ;
  8. public double getdX() {
  9. return dX;
  10. }
  11. public void setdX(double dX) {
  12. this.dX = dX;
  13. }
  14. public double getdY() {
  15. return dY;
  16. }
  17. public void setdY(double dY) {
  18. this.dY = dY;
  19. }
  20. public double getdZ() {
  21. return dZ;
  22. }
  23. public void setdZ(double dZ) {
  24. this.dZ = dZ;
  25. }
  26.  
  27. }
  1. 注意
    1. 类成员变量名不可为XYZ,否则digester报错,原因不明。
  • 可以先定义成员变量,然后用MyEclipse工具“生成setter和getter函数”

 

5 xmlrule文件加载类

  1. package xml.digester;
  2.  
  3. import java.io.File;
  4.  
  5. import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
  6.  
  7. public class myRulesLoader extends FromXmlRulesModule
  8. {
  9. private String xmlrule;
  10.  
  11. public myRulesLoader(String xmlfile){
  12. xmlrule = xmlfile;
  13. }
  14. @Override
  15. protected void loadRules()
  16. {
  17. loadXMLRules( new File( xmlrule ) );
  18. }
  19.  
  20. }

.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 运行示例

  1. public static void main(String[] args){
  2. try {
  3. // 加载xmlrule文件
  4. DigesterLoader loader = newLoader(new myRulesLoader("d:\\drule3.xml"));
  5. // 创建Digester实例
  6. Digester digester = loader.newDigester();
  7. // 解析xml文件
  8. FileInfo info = (FileInfo) digester.parse(new File("d:\\9.xml"));
  9. // 分析解析结果
  10. info.show();
  11. }
  12. catch (Exception e){
  13. e.printStackTrace();
  14. }
  15.  
  16. }

.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 结果示意

  1. ...
  2. Name: Band_1KM_Emissive
  3. Fname: G:\YX\HDF_NC_H5\MOD021KM.A2009345.0400.005.2010257180913.hdf
  4. Description: 1KM Emissive Band Numbers for Subsetting
  5. NS: 16
  6. NL: 1
  7. NB: 1
  8. FileType: HDF4
  9. DataType: FLOAT
  10. Satellite: null
  11. Sensor: null
  12. picPath:
  13. xyz: 0.00.00.0
  14. xyz: 0.00.00.0
  15. xyz: 0.00.00.0
  16. xyz: 0.00.00.0
  17. ...

.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文件的更多相关文章

  1. 深入浅出如何解析xml文件---下篇

    在上篇博文中,小编主要介绍xml的两种解析方式,分别是dom4j和dom,今天这篇博文,小编主要来简单介绍一下xml的其她两种解析方式sax和jdom.  sax解析xml文件 sax,全称是Simp ...

  2. Java--Dom解析XML文件

          之前写过几篇关于Java中解析XML文件的方法,不过,感觉不够简单,今天重写了一遍代码,用到的是方法是Dom,其中加入了日志记录功能--Log4j.       好了,不多说了,先把XMl ...

  3. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

  4. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  5. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  6. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  7. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  8. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  9. dom4j如何解析XML文件

    最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~ 首先说:dom4j是一个java的XML ...

随机推荐

  1. NOIP2010-普及组复赛模拟试题-第一题-手机

    题目背景 Background 现在手机使用越来越广泛了  题目描述 Description 一般的手机的键盘是这样的:   要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一 ...

  2. unity 退到桌面的 OnApplicationPause

    void OnApplicationFocus( bool isFocus ) { // Debug.Log("--------OnApplicationPause---" + i ...

  3. 华为配置SSH登陆详细步骤

    理解下SSH登录的过程: 1.建立目的端口为22的TCP连接 2.协商SSH版本 3.协商密钥和算法 4.会话建立 下面为server端的详细配置步骤: 1.创建本地RSA密钥对 rsa local- ...

  4. mongoDB3--mongoDB的基本操作。

    [MongoDb探究]03-mongodb基本操作语句 标签: mongodbdb.createCollectiondb.collectionName.indb.dropDatabasedb.coll ...

  5. java代码如何读取properties文件

    我们在开发工程中,有时候需要在Java代码中定义一些在部署生产环境时容易改变的变量,还需要我们单独放在一个外部属性文件中,方便我们将来修改.这里列出了两种比较方便的方式. 一.在Spring配置文件中 ...

  6. linux上安装配置samba服务器

    linux上安装配置samba服务器 在linux上安装配置samba服务器 在这给大家介绍一个不错的家伙,samba服务.如果您正在犯愁,如何在Windows和Linux之间实现资源共享,就请看看这 ...

  7. leetcode70

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  8. 日期和时间特效-查看"今天是否为节假日"

    ———————————————— <script type="text/javascript">                    function start() ...

  9. hdu_5800_To My Girlfriend(变种背包)

    题目链接:hdu_5800_To My Girlfriend 题意: 给你n和物品和一个重量m,让你求 题解: To My Girlfriend 令dp[i][j][s1][s2]表示前i个物品填了j ...

  10. hdu_1181_变形课(dfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1181 题意:中文题,不解释 题解:直接DFS #include<cstdio> #incl ...