digester java_Java XML解析之Digester的使用
Java XML解析之Digester的使用
Digester據說最早是為解析struts的配置文件開發的,后來慢慢的就發展成一個輕量,快速,單向(只能從xml到java對象)的一個綁定框架,在運行時實現綁定,無需定義xml文件的DTD或Schema,簡單快速。
一、使用Digester的步驟
1. 創建一個Digester的實例。完成parse后,實例可以被安全的重用,但實例不是線程安全的。
2. 設置配置屬性
3. 加入處理規則
4. 調用digester.parse()方法。
二、從一個例子說起
先看一個Digester文檔上的簡單例子
對象樹
package mypackage;
public class Foo ...{
public void addBar(Bar bar);
public Bar findBar(int id);
public Iterator getBars();
public String getName();
public void setName(String name);
}
package mypackage;
public class Bar ...{
public int getId();
public void setId(int id);
public String getTitle();
public void setTitle(String title);
}
XML文檔片段
解析代碼
Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate("foo", "mypackage.Foo");
digester.addSetProperties("foo");
digester.addObjectCreate("foo/bar", "mypackage.Bar");
digester.addSetProperties("foo/bar");
digester.addSetNext("foo/bar", "addBar", "mypackage.Bar");
Foo foo = (Foo) digester.parse();
從例子可以看到Digester的執行步驟是掃描xml文檔,匹配特定的xml節點,在每一個節點按照預定的處理規則操縱對象,包括創建對象,設置對象屬性,建立對象樹等。
三、節點匹配規則
-- Matches pattern "a" -- Matches pattern "a/b" -- Matches pattern "a/b/c" -- Matches pattern "a/b/c" -- Matches pattern "a/b" -- Matches pattern "a/b/c" -- Matches pattern "a/b/c" -- Matches pattern "a/b/c" 可以看到匹配規則非常簡單,此外,匹配還支持通配符,像*/a就匹配任意層次內的。
一個特定的XML元素可以被匹配多次,所對應的處理規則執行的順序如下:如果是begin和body方法,按照規則被加入到Digester的順序執行,如果是end方法,則相反(參見后面處理規則)。
對於通配符匹配,當一個確定的匹配發生時(如果多個通配符匹配發生,最長的一個被認為是一個確定的匹配),通配符匹配將被忽略。這個意思就是說,當規則A被加入到*/a時,意思是這個規則匹配任意一個元素,但是如果規則C被加入到x/a,則A對於
Rule ruleA = new ObjectCreateRule(); Rule ruleB = new SetNextRule(); Rule ruleC = new SetPropertiesRule(); digester.addRule("*/a", ruleA); digester.addRule("*/a", ruleB);digester.addRule("x/a", ruleA); digester.addRule("x/a", ruleB); digester.addRule("x/a", ruleC);
四、處理規則
處理規則的目的就是定義當匹配發生時做什么事情。每一個處理規則都是org.apache.commons.digester.Rule接口的實現類。當匹配發生時Rule接口的回調方法被調用,執行相應的操作。
Rule接口的方法:
begin 當進入匹配元素時調用
body 當進入匹配元素的內容時調用
end 當離開匹配元素時調用
finish 當paser結束時調用
常見的內置處理規則
ObjectCreateRule:進入匹配元素時調用,創建一個特定的java對象。
SetPropertiesRule:進入匹配元素時調用,利用Java的反射API設置棧頂對象的屬性,要求Java對象的屬性名匹配XML元素的屬性名。
SetNextRule:離開匹配元素時調用,digester分析下一個棧頂對象,調用該對象的指定屬性的setter方法,將當前棧頂對象作為參數傳入到該方法,同時彈出當前棧頂對象。
SetTopRule:和SetNextRule含義相同,分析棧頂對象,調用該對象指定屬性的setter方法,將下一個棧頂對象作為參數傳給該方法(典型會被調用的方法是setParent)。
CallMethodRule:調用棧頂對象指定的方法。設置這個規則需要指出調用的方法名,參數個數,參數Java類型(可選),參數值一般是匹配元素的body content,用CallParamRule指定。
CallParamRule :標識CallMethodRule中的方法參數。參數值可能是匹配元素的某個屬性,或匹配元素的body content。
Digester的處理過程
Digester使用堆棧來存儲對象,當ObjectCreateRule被執行時,將對象壓入棧,像SetPropertiesRule,SetTopRule,CallMethodRule等規則都是對棧頂對象的操作。當SetNextRule被執行時,彈出棧頂對象,下一個棧頂對象成為棧頂對象,最后返回對象樹的根節點。
Digester詳細描述參見http://commons.apache.org/digester/commons-digester-1.8/docs/api/org/apache/commons/digester/package-summary.html#doc.Description
digester java_Java XML解析之Digester的使用相关推荐
- 一键解析XML文件(利用Digester实现可配置)
大部分程序员,平时工作中除了与Bug相伴之外,想必也会很多种多样的文件打交道吧.当然,XML 就是其中之一,获取交互数据,创建规则等等,都离不开他.XML是个非常强大的描述语言,相比而言,txt之流则 ...
- digester java_利用Digester把XML转换为Java对象
在一个比较完整的应用系统里,经常需要有一些配置文件.简单的属性使用.properties文件即可,但要配置一些复杂对象,则应该考虑使用xml文件.一般用来读取xml文件的工具包有DOM.SAX和JDO ...
- digester java_[jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!)...
# re: [jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!) 2009-11-09 10:27 | Java小子 楼主,运行起 ...
- xml解析 java_Java的XML解析
XML:(eXtensible Markup Language) 可扩展标记语言 是一种数据格式,用于存储和传输数据 声明一个xml文件 文档类型定义 book.dtd"> only: ...
- java xml开源操作类,xml解析和操作的开源工具项目涵盖java c++ php 等语言
XML解析器-Xerces XML操作库-dom4j XML文档解析器-Digester J2ME-的XML-解析器-kXML XML解析类库-MXP1 XML解析器-LibX ...
- c语言解析xml字符串_Python XML解析
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
- XML解析简介及Xerces-C++简单使用举例
XML是由World WideWeb联盟(W3C)定义的元语言.它已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.XML在不同的语言里解析方式 ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- C++ XML解析之TinyXML篇[转]
最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...
- Java XML解析器
使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...
最新文章
- GitLab安装,导入,备份
- mysql-atlas安装及使用教程
- java i数据类型_数据类型 I
- 关于计算机视觉(随谈)
- 机器视觉 · 视觉系统选型
- 分享一个HTML5画布实现的超酷文字弹跳球效果
- 导览系统定制开发_联联周边游系统源码定制开发平台方案
- window系统对应默认IE浏览器版本
- 【luogu T34117 打油门】 题解
- 省市县三级联动sql数据
- 115怎么利用sha1下载东西_用于批量倾倒和提取的115 sha1工具
- c语言用if函数如何判断闰年,excel怎么用IF公式判断闰?
- TextView描边、渐变、阴影效果
- 背景图片随页面滚动放大缩小
- 分分钟掌握人脸识别:face_recognition模块
- 文章数据分析与自动分类
- [GWCTF 2019]pyre
- keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf
- linux 没有权限访问共享文件夹的问题
- 步科触摸屏HMI通过MODBUS RTU与ESP32通讯
热门文章
- 三菱q系列plc连接电脑步骤_SERVER和三菱Q系列PLC通讯设置步骤
- 西瓜数据集的各种版本,比如说2.0,3.0,4.0都在这
- 论文笔记:Securing Data With Blockchain and AI
- 超火动态表白H5源码
- flash写保护原理_Flash存储原理
- M1芯片Mac mini 2K显示器开启HiDpi
- shufflenet_v1
- 专题:固体力学中应力与应变分析详解(5.主方向与主应力)
- wpsmac和pc版的区别_办公得力小助手你选谁, WPS Mac版和Microsoft区别在哪里?
- ps6人脸识别液化工具在哪_ps液化工具在哪