因为需要写个程序解析RSS,于是下载了最新的digester3版本:commons-digester3-3.2-bin.zip
http://commons.apache.org/proper/commons-logging/download_logging.cgi
用以前的惯常写法,一直不行。
public static void main(String[] args) {
Digester digester = new Digester();
hand.addRuleInstances(digester);
Channel ch = digester.parse("d:/rss.xml");
}
public void addRuleInstances(Digester dig) {
// TODO Auto-generated method stub
dig.setValidating(false) ;
dig.setNamespaceAware( true );
dig.addObjectCreate("rss/channel", Channel.class) ;
dig.addBeanPropertySetter("rss/channel/title", "title") ;
dig.addBeanPropertySetter("rss/channel/link", "link") ;
dig.addBeanPropertySetter("rss/channel/description", "description") ;
dig.addBeanPropertySetter("rss/channel/copyright", "copyright") ;
dig.addObjectCreate("rss/channel/item", Item.class) ;
dig.addBeanPropertySetter("rss/channel/item/title", "title") ;
dig.addBeanPropertySetter("rss/channel/item/link", "link") ;
dig.addBeanPropertySetter("rss/channel/item/description", "description") ;
dig.addBeanPropertySetter("rss/channel/item/pubDate", "pubDate") ;
dig.addBeanPropertySetter("rss/channel/item/guid", "guid") ;
dig.addSetNext("rss/channel/item", "addItem" ) ;
}
一直报这样一个错
java.lang.UnsupportedOperationException: This parser does not support specification “null” version “null”
查了下源码,分析原因,无外乎是说digester创建解析器失败。
自己手动建解析器,解决之
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
this.digester = new Digester(parser) ;
this.addRuleInstances(digester) ;
这样就能解决报错问题了。
附上封装的几个解析器
public Channel parse(File file ){
Channel chan = null ;
try {
InputStream in = new FileInputStream(file);
chan = this.digester.parse(in) ;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return chan ;
}
public Channel parse(String locationfile){
return this.parse(new File(locationfile)) ;
}
/**
* 解析速度受网络影响
* @param url
* @return
*/
public Channel parse(URL url){
Channel chan = null ;
try {
URLConnection feed = url.openConnection() ;
feed.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT; DigExt)");
chan = this.digester.parse(feed.getInputStream() ) ;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return chan ;
}
javabean
public class Channel {
private final List<Item> items = new ArrayList<Item>();
//@BeanPropertySetter( pattern = "rss/channel/title")
private String title;
//@BeanPropertySetter( pattern = "rss/channel/link")
private String link;
//@BeanPropertySetter( pattern = "rss/channel/description")
private String description;
//@BeanPropertySetter( pattern = "rss/channel/language")
private String language;
//@BeanPropertySetter( pattern = "rss/channel/copyright")
private String copyright ;
//@BeanPropertySetter( pattern = "rss/channel/dc:creator")
private String creator ;
//@BeanPropertySetter( pattern = "rss/channel/dc:rights")
private String rights ;
。。。
分享到:
相关推荐
<artifactId>commons-digester3 <version>3.2 ``` 2. **创建XML文档**:编写符合项目需求的XML配置文件。例如: ```xml 张三 <age>30 李四 <age>25 ``` 3. **定义Java对象**:根据XML结构创建相应...
标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...
3. **链式解析(Rule Chaining)**: Digester 支持链式解析,即当一个规则被触发后,可以继续触发另一个规则。这对于处理嵌套的XML结构非常有用。 4. **对象工厂(ObjectFactories)**: 当需要动态创建对象时,可以...
3. **解析 XML**:创建好 Digester 实例后,使用 `parse` 方法读取 XML 文件并执行预定义的规则。代码示例如下: ```java Digester digester = new Digester(); digester.setValidating(false); // 关闭验证,...
### Digester解析XML知识点详解 #### 一、Digester简介 **Digester** 是Apache Commons项目中的一个子项目,主要用于简化XML文档的解析工作。它建立在SAX的基础之上,通过定义一系列的模式(Pattern)和规则(Rule...
本文将深入探讨如何使用Digester解析XML文件,以及在实际项目中如何应用。 首先,让我们了解什么是Apache Commons Digester。这是一个Java库,它的主要功能是读取XML文件,并基于一系列预先定义的规则(Rule),...
2. **设置解析器**:将XML解析器(如SAXParser)与Digester关联,以便在解析XML时触发已设定的规则。 3. **解析XML**:使用`parse`方法,传入XML文件的输入流,开始解析过程。 4. **处理结果**:解析完成后,根...
### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...
在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML文件并自动创建、配置Java对象。本文将详细介绍如何使用Digester处理具有嵌套结构的XML文档,并通过一个具体的实例——"DigesterXmlTest"来...
为了方便地解析和操作XML文档,Apache组织提供了一个名为`Digester`的工具,它是一个用于将XML文档映射到Java对象的框架。本篇文章将详细介绍如何使用`Digester`解析XML,以及在使用过程中需要的依赖库。 首先,`...
Apache Commons Digester是一个Java库,专门用于将XML文档解析成对象结构。这个“org.apache.commons.digester解析XML.rar”压缩包包含了一个测试工程,它演示了如何使用Digester库来解析XML文件并映射到Java对象上...
在示例代码中, DigesterDriver演示了如何配置 Digester来解析XML文件,创建`Catalog`对象并填充其`Book`和`Magazine`子对象,以及相关的`Article`对象。每个元素的属性通过`addBeanPropertySetter()`设置,而对象...
3. **解析XML**:使用`parse()`方法加载XML文件并开始解析。在解析过程中,匹配到的规则会被触发执行。 4. **XML结构与Java对象**:XML文件的根元素通常对应一个顶级Java对象,而子元素则对应该对象的属性或者子...
不错的解析XML的类,主要利用org.apache.commons.digester.Digester;
3. **解析XML**:使用 Digester 的 `parse()` 方法读取XML文件,根据预先定义的规则进行处理。 4. **结果处理**:最后,Digester会生成一个对象模型,代表了XML文档的内容。 以下是一个简单的 Digester 使用示例: ...
《digester解析XML详解》 在Java开发中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输等场景。为了方便地将XML文档解析为Java对象,Apache组织提供了一个名为Digester的工具库,它允许开发者通过规则来...
创建`org.apache.commons.digester3.Digester`实例,并设置一些基本配置,如编码、命名策略等。 4. **注册规则** 使用`addRuleSet()`方法注册预定义的规则集,或者使用`addRule()`、`addSetProperties()`等方法...