[Java学习]使用digester 解析xml配置文件

Digester解析XML文件的三种方式(javabean存储,map和list存储,xml规则配置) Digester解析XML文件的三种方式(javabean存储,map和list存储,xml规则配置) 1.作用及依赖jar包 首先明白Digester是干什么的?它是apache开源项目Commons中的一个子项目,用于解析XML文档的工具。Digester底层采用的是SAX解析方式,通过遍历XML文档规则来进行处理。项目中有需要将XML文件中的信息解析为我们需要的内容时(如java类),使... 阅读详情
Java离不开xml配置文件,而Apache的Digester是解析xml的一个很好的工具。
Digester的运行依赖下列包:

一个遵循Jaxp(1.1版本及以后)的XML解析器
Jakarta commons beanutils包(1.5版本及以后)
Jakarta commons collections包(2.1版本及以后)
Jakarta commons logging包(1.0.2版本及以后)
(请到 http://www.apache.org 下载运行环境)

下面,是我的一个用digester解析xml配置文件的例子.
//--webconfig.xml--
<?xml version="1.0" encoding="UTF-8"?>
<web>
<root name = "root_name1">
<bar id="0" title="The Zero Child"/>
<bar id="123" title="The First Child"/>
<bar id="456" title="The Second Child"/>
</root>
<root name = "root_name2">
<bar id="789" title="Another Child"/>
</root>
</web>


分析该文件,发现如下的层次结构web-> root -> bar
因此,我们先建立三个映射的JavaBean:WebConfig.java ,Root.java, Bar.java
//--Bar--.java
package com.stru.config;

public class Bar {
private int id;
private String title;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

//--Root--.java
package com.stru.config;

import java.util.HashMap ;

public class Root {
private String name;
private HashMap barsMap = new HashMap();

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public void addBar(Bar bar){
barsMap.put(new Integer(bar.getId()), bar) ;
}
public Bar findBar(int id){
return (Bar)barsMap.get(new Integer(id)) ; 
}
public Bar[] getBars(){
Object objs[] = barsMap.values().toArray() ;
Bar[] results = new Bar[objs.length];
for (int i = 0; i < objs.length-1; i++) {
for (int j = 0; j < objs.length - 1 - i; j++) {
int x1 = ((Bar)objs[j]).getId() ;
int x2 = ((Bar)objs[j+1]).getId() ;
if (x1>x2){
Object temp = objs[j] ;
objs[j] = objs[j+1] ;
objs[j+1] = temp ;
}
}
}
for (int i = 0; i < objs.length; i++) {
results[i] = (Bar) objs[i];
}
return results ;

}

public int getSize(){
return barsMap.size() ;
}
}

//--WebConfig.java--
package com.stru.config;

import java.util.HashMap ;

public class WebConfig {
private HashMap rootsMap = new HashMap() ;

public void addRoot(Root root){
rootsMap.put(root.getName(), root) ;
}
public Root findRoot (String name){
return (Root)rootsMap.get(name) ;
}
public Root[] getRoots(){
Object objs[] = rootsMap.values().toArray() ;
Root[] results = new Root[objs.length];
for (int i = 0; i < objs.length; i++) {
results[i] = (Root) objs[i];
}
return results ;
}
public int getSize(){
return rootsMap.size() ;
}
}


映射的JavaBean 建立之后,需要建立对应规则,Digester的对应规则如下: 
Digest 
Digester digester = new Digester();新建一个类
digester.setValidating(false);是否进行XML与相应的DTD的合法性验证(此处为false)
digester.addObjectCreate("root", "Root");当遇到<root>时创建一个Root对象,并将其放在栈顶
digester.addSetProperties("root");根据<root>元素的属性(attribute),对刚创建的Root对象的属性(property)进行设置
digester.addObjectCreate("root/bar", "Bar");当遇到<root>的子元素<bar>时创建一个Bar对象,并将其放在栈顶。
digester.addSetProperties("root/bar");根据<bar>元素的属性(attribute),对刚创建的Bar对象的属性(property)进行设置
digester.addSetNext("root/bar", "addBar", "Bar");当再次遇到<root>的子元素<bar>时创建一个Bar对象,并将其放在栈顶,同时调用第二栈顶元素(Root对象)的addBar方法。
digester.parse();进行解析,得到的是Object

//--ConfigRuleSet.java--

package com.stru.config;

import org.apache.commons.digester.*;

public class ConfigRuleSet extends RuleSetBase{        //注意,需要继承RuleSetBase
public void addRuleInstances(Digester digester){
digester.setValidating( false );
digester.addObjectCreate("web", WebConfig.class) ;
digester.addSetProperties("web");

digester.addObjectCreate( "web/root", Root.class );
digester.addSetProperties("web/root");
digester.addSetNext( "web/root", "addRoot" );

digester.addObjectCreate( "web/root/bar", Bar.class );
digester.addSetProperties("web/root/bar");
digester.addSetNext( "web/root/bar", "addBar" );

} 
}

这样就可以,简单吧?最后,我们建立一个测试类来进行测试:

//ConfigTest.java

package com.stru.config;

import java.io.File;
import java.io.IOException;
import org.apache.commons.digester.*;
import org.xml.sax.SAXException;

public class ConfigTest {
public static void main(String[] args) {
final String fileName = "D://ecampus//tom-stru//WEB-INF//webconfig.xml" ;
WebConfig config = new WebConfig() ;
Digester digester = new Digester() ;
ConfigRuleSet rule = new ConfigRuleSet();
rule.addRuleInstances(digester) ;
try {
config = (WebConfig)digester.parse(new File(fileName)) ;
System.out.println("roots size :" + config.getSize()) ;
Root[] roots = config.getRoots() ;
for (int i = 0; i < roots.length; i++) {
System.out.println("root name:" + roots[i].getName()) ;
Bar[] bars = roots[i].getBars() ;
for (int j = 0; j < bars.length; j++) {
if(j>0) System.out.println("/t------------------");
System.out.println("/tbar id:" + bars[j].getId()) ;
System.out.println("/tbar title:" + bars[j].getTitle()) ;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} 
}
}

运行结果:

roots size :2
root name:root_name2
bar id:789
bar title:Another Child
root name:root_name1
bar id:0
bar title:The Zero Child
------------------
bar id:123
bar title:The First Child
------------------
bar id:456
bar title:The Second Child

此程序在Eclipse3.0 下测试通过.

 

掌握Apache Commons Digester解析XML的实战指南 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它被设计为能够描述各种类型的数据,从简单的数据列表到复杂的数据结构。XML以一种不依赖于应用程序或供应商的格式,使数据的存储和共享变得简单。XSD(XML Schema Definition)是一种用于定义XML文档结构的XML语法。它不仅可以描述数据的结构,还能指定数据类型的约束,如数值范围、字符串长度等。XSD是XML的验证机制,确保XML文档符合既定的规则和结构。 阅读详情

相关推荐

Apache Commons Digester XML解析实践指南

在信息技术飞速发展的今天,可扩展标记语言(XML)作为一种灵活的数据表示方式,在众多领域发挥着重要作用。从简单的配置文件到复杂的业务数据交换,XML凭借其结构化、可扩展以及人类可读的特点,成为数据交换的标准语言之一。Apache Commons Digester是一个用于解析XML文档并将XML文档内容映射到Java对象的工具库。它通过定义一系列的规则来实现对XML文档的处理,可以简化XML文档到Java对象的映射过程。

weixin_42602368的博客 967

java digester_Apache Commons Digester 一 (基础内容、核心API)

前言在许多需要处理XML格式数据的应用环境中, 如果能够以“事件驱动”的方式来处理XML文档,比如,当识别出特定的XML元素时,触发“创建对象”操作事件(或者触发调用对象的方法事件),这对于应用程序开发来说,是非常有用的;熟悉以SAX(Simple API for XML Parsing)方式来处理XML文档的开发人员会认识到,Digester为SAX事件提供了更高层次,对开发者更加友好的接口,它...

weixin_36356002的博客 371

Apache Digester解析XML文档的实用教程

Apache Digester 是一个强大的开源库,它极大地简化了将 XML 文档转换为 Java 对象的过程。Digester 通过定义一系列的解析规则来实现这一过程,这些规则描述了 XML 元素与 Java 对象属性之间的映射关系。开发人员可以轻松地将 XML 文件中的数据填充到 Java 对象的字段中,极大地减少了编写解析代码的工作量。本章将带领读者认识 Digester 的核心组件,并探讨其在数据处理中的优势。

weixin_35734408的博客 882

digester java_Java XML解析之Digester的使用

Java XML解析之Digester的使用Digester據說最早是為解析struts的配置文件開發的,后來慢慢的就發展成一個輕量,快速,單向(只能從xml到java對象)的一個綁定框架,在運行時實現綁定,無需定義xml文件的DTD或Schema,簡單快速。一、使用Digester的步驟1. 創建一個Digester的實例。完成parse后,實例可以被安全的重用,但實例不是線程安全的。2. 設置...

weixin_32211599的博客 506

增量编码器资讯大全

增量编码器是什么 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,按照工作原理编码器可分为增量式和绝对式两类。 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。 编码器是把角位移或直线位移转换成电信号的一种装置。前者称为码盘,后者称码尺.按照读出方式编码器可以分为接触式和非接触式两种.接触式采...

kindele的博客 6008

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 397

Tomcat源码阅读二

tomcat源码

nieyanshun_me的专栏 344

Ubuntu20.04安装Eigen3.3.7、模板类Sophus和Ceres

Sophus的使用必须依赖3.3以上的Eigen版本。如果版本太低,Sophus库将无法安装使用。

qq_62964142的博客 3422

Tomcat之XML解析器Digester

Catalina中使用Digester解析XML(server.xml)配置文件并创建应用服务器。 Digester是一款用于将XML转换为Java对象的事件驱动型工具,是对SAX的高层次封装,它提供了更加友好的接口,隐藏了XML节点具体的层次细节,使开发者可以更加专注于处理过程。 Digester最早作为Appache Struts的一部分,后来考虑其通用性,将其移动到了Appache Co...

上善若水 779

逆向实战:如何绕过iTunes 12.6.5.3的反调试机制(附X64dbg插件配置)

本文深入剖析了iTunes 12.6.5.3的反调试机制与登录协议。通过X64dbg动态调试与IDA静态分析,详细演示了如何绕过其反调试检测,并定位到核心的登录协议加密函数,揭示了其请求签名(X-Apple-ActionSignature)的生成逻辑与依赖关系,为客户端安全研究与协议分析提供了实战思路。

weixin_29202213的博客 742

使用R语言实现循环神经网络RNN进行文本生成

首先,让我们回顾一下循环神经网络(Recurrent Neural Networks,RNN)的基本概念。RNN是一种深度学习技术,特别适合处理序列数据,如时间序列和文本数据。RNN的关键特性是它的隐藏状态,这个状态可以捕捉到当前输入之前的信息。这使得RNN能够利用前面的信息来影响后续的输出,从而对序列数据进行有效的处理。

斌擎科技 724

digester解析xml文件

正文 在我们的项目中或多或少会采用xml来做配置文件,你可以采用Java原生支持的sax、DOM或者第三方的dom4j等。虽然提供了各式各样的解析方式,但是解析一个复杂的xml所编写的Java代码是非常麻烦的,尤其是当xml做了修改,你会发现你又要修改Java代码。 Apache的commons项目中Digester项目解决了这个问题,它可以很轻易地将xml文件解析成Java对象,让你直接去...

不甘平庸的人 536

linux内核协议栈 TCP选项之SACK选项概述

目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重...

2731

Jakarta Commons-Digester学习笔记

学习Digester笔记:Digester原是Apache Jakarta Struts计划中的一部分,用来解析Web App中的XML配置文件,在开发一段时间之后,开发人员觉得这个小工具具有很普遍的使用场合,于是,将这个部分独立出来,放到Commons项目中。Digester是一个将配置文件转换为Java对象的工具,有三个核心概念:①:元素匹配规则Pattern(有点类似于XPath) →找出X

smilingleo的专栏 1418

落地实战!Python构建地方政府公开数据爬虫:政策/数据/规划全维度抓取(附反爬适配+数据清洗)

政务公开数据爬虫的核心不是“技术多先进”,而是“适配政务网站的特性”——慢一点、稳一点、合规一点,比追求抓取速度更重要。多地市爬虫集群:通过配置文件管理不同地市的URL规则,实现全省/全国政务数据抓取;图片表格识别:结合OCR工具(如pytesseract)识别政务网站的图片表格,转换为结构化数据;数据可视化:将抓取的统计数据导入PowerBI/Matplotlib,实现区域发展趋势分析。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1799

AI安全护栏评测:TrustedExecBench如何量化评估大模型防护能力

在人工智能和机器学习领域,模型安全对齐是确保AI系统可靠、可控的核心技术。其原理是通过设计安全机制(即“护栏”)来约束模型行为,防止生成有害、偏见或越界内容。这项技术的核心价值在于平衡AI能力与风险管控,是可信AI部署的基石。应用场景广泛覆盖内容审核、对话系统、代码生成等需要人机交互的领域。本文聚焦的TrustedExecBench项目,正是针对“护栏”性能量化评估这一痛点,提供了一个标准化、自动化的开源评测框架。该工具通过构建多维度的恶意测试套件,并引入基于模型的动态评判机制,能够系统性地检验大语言模型在

weixin_42525428的博客 378

java用Digester解析xml文件——高效率的xml解析

Digester不是jdk里面自带的,有依赖包

敲码农的小代码   ; 15万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Digester解析xml文件

刚刚学了一下Digester如何解析xml文件,所以记录下来,方便以后查看。解析XML文档方面有不少的方法,也有不少的工具包可用,这里介绍的是来自Apache Jakarta的Digester,使用其解析XML文件非常方便而不需要过多的关心底层的具体解析过程。 Digester最早出现在Struts中,后来随着Struts的发展以及其的公用性而被提到commens中独自立项,其底层实现的是SAX解析。下面介绍解析xml文件的代码下面是存放地址及编码的xml文件viewcache.xml(片段):109810

caihaijiang的专栏 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Digester及XML三种解析方式介绍

Digester基于规则的XML文档解析,主要用于XML到Java对象的映射。Struts就是用Digester来处理XML配置文件的。 如今Digester随着Struts的发展以及其的公用性而被提到commons中独自立项,是apache的一个组件 apache commons-digester.jar,通过它可以很方便的从xml文件生成java对象。 digester主页:http:

2218

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java digester_使用digester解析XML配置文件

解析文档的模型比较常用的有sax、dom、jdom、dom4j四种模型:sax是从上到下逐步读取,遍读边产生事件(解析),只读一次哈;由于这个特性呢,决定了这种读取方式不能随机访问,不能修改文件,这种模型最大的优点就是对于大型文件不会显得麻烦。如果我们想修改文件,或者随机访问呢;就得用到DOM模型了。DOM模型是先将XML文档全部读取到内存中,再解析。这种特性决定了,它解析文件占用大量内存,不能解...

weixin_36283702的博客 234

tomcat xml解析-digester

在tomcat里,digester就是。digester本来仅仅是Jakarta Struts中的一个工具,用于处理struts-config.xml配置文件。由于将XML文件转换成相应的Java对象是一项很通用的功能,后来又被移到了Apache Common项目中。但在Tomcat中并不依赖Apache common,而是将Digester源码包含了进来,并改变了包路径。

qq_32868023的博客 553

使用Digester解析XML文件简单范例

 需要读取的XML文件PayoutConfig.xml:pageList>  payout_entry name="债项支用-授信品种和URL对照表">      item productCode="02001001"    productName="土地储备贷款" />         item productCode="04001002"    productName="房地产开发" 

FoxGit的专栏 970

java digester_digester解析xml文件

在我们的项目中或多或少会采用xml来做配置文件,你可以采用Java原生支持的sax、DOM或者第三方的dom4j等。虽然提供了各式各样的解析方式,但是解析一个复杂的xml所编写的Java代码是非常麻烦的,尤其是当xml做了修改,你会发现你又要修改Java代码。Apache的commons项目中Digester项目解决了这个问题,它可以很轻易地将xml文件解析成Java对象,让你直接去使用,而你仅仅...

weixin_31578739的博客 363

使用Digester解析XML配置文件

从XML到Java对象在Java项目中经常使用XML配置文件管理后台应用规则、实现程序初始化等操作。Digester便是专门用于从XML映射到Java对象的开源组件。它最初起源于大名鼎鼎的Struts,用于其中的配置解析工作。后来考虑到其实用性,便将其提取为独立的Apache项目,即Digester。 示例1有如下XML(config.xml):root> 

chifengxin的专栏 5291
上一篇: [翻译]J2EE项目危机
下一篇: Aerosmith- Dream on
Gooing
博客等级 码龄24年 4粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值