`

digester3解析xml(rss)手记

 
阅读更多
因为需要写个程序解析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 ;
。。。
分享到:
评论

相关推荐

    使用Apache的Digester来解析XML文档

    &lt;artifactId&gt;commons-digester3 &lt;version&gt;3.2 ``` 2. **创建XML文档**:编写符合项目需求的XML配置文件。例如: ```xml 张三 &lt;age&gt;30 李四 &lt;age&gt;25 ``` 3. **定义Java对象**:根据XML结构创建相应...

    利用commons-digester解析xml

    标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...

    Digester java解析xml

    3. **链式解析(Rule Chaining)**: Digester 支持链式解析,即当一个规则被触发后,可以继续触发另一个规则。这对于处理嵌套的XML结构非常有用。 4. **对象工厂(ObjectFactories)**: 当需要动态创建对象时,可以...

    digester解析xml的问题.pdf

    3. **解析 XML**:创建好 Digester 实例后,使用 `parse` 方法读取 XML 文件并执行预定义的规则。代码示例如下: ```java Digester digester = new Digester(); digester.setValidating(false); // 关闭验证,...

    Digester解析XML

    ### Digester解析XML知识点详解 #### 一、Digester简介 **Digester** 是Apache Commons项目中的一个子项目,主要用于简化XML文档的解析工作。它建立在SAX的基础之上,通过定义一系列的模式(Pattern)和规则(Rule...

    Digester解析XML文件

    本文将深入探讨如何使用Digester解析XML文件,以及在实际项目中如何应用。 首先,让我们了解什么是Apache Commons Digester。这是一个Java库,它的主要功能是读取XML文件,并基于一系列预先定义的规则(Rule),...

    digester解析xml必备包.rar

    2. **设置解析器**:将XML解析器(如SAXParser)与Digester关联,以便在解析XML时触发已设定的规则。 3. **解析XML**:使用`parse`方法,传入XML文件的输入流,开始解析过程。 4. **处理结果**:解析完成后,根...

    使用Digester解析XML文档示例

    ### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...

    Digester解析XML的小例子(对象嵌套)

    在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML文件并自动创建、配置Java对象。本文将详细介绍如何使用Digester处理具有嵌套结构的XML文档,并通过一个具体的实例——"DigesterXmlTest"来...

    digester解析xml 所需jar包

    为了方便地解析和操作XML文档,Apache组织提供了一个名为`Digester`的工具,它是一个用于将XML文档映射到Java对象的框架。本篇文章将详细介绍如何使用`Digester`解析XML,以及在使用过程中需要的依赖库。 首先,`...

    org.apache.commons.digester解析XML.rar

    Apache Commons Digester是一个Java库,专门用于将XML文档解析成对象结构。这个“org.apache.commons.digester解析XML.rar”压缩包包含了一个测试工程,它演示了如何使用Digester库来解析XML文件并映射到Java对象上...

    Digester解析XML问题.pdf

    在示例代码中, DigesterDriver演示了如何配置 Digester来解析XML文件,创建`Catalog`对象并填充其`Book`和`Magazine`子对象,以及相关的`Article`对象。每个元素的属性通过`addBeanPropertySetter()`设置,而对象...

    digester解析XML文件实例

    3. **解析XML**:使用`parse()`方法加载XML文件并开始解析。在解析过程中,匹配到的规则会被触发执行。 4. **XML结构与Java对象**:XML文件的根元素通常对应一个顶级Java对象,而子元素则对应该对象的属性或者子...

    使用digester解析XML

    不错的解析XML的类,主要利用org.apache.commons.digester.Digester;

    java反射,Digester解析xml文档

    3. **解析XML**:使用 Digester 的 `parse()` 方法读取XML文件,根据预先定义的规则进行处理。 4. **结果处理**:最后,Digester会生成一个对象模型,代表了XML文档的内容。 以下是一个简单的 Digester 使用示例: ...

    digester解析xml

    《digester解析XML详解》 在Java开发中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输等场景。为了方便地将XML文档解析为Java对象,Apache组织提供了一个名为Digester的工具库,它允许开发者通过规则来...

    digester 解析xml

    创建`org.apache.commons.digester3.Digester`实例,并设置一些基本配置,如编码、命名策略等。 4. **注册规则** 使用`addRuleSet()`方法注册预定义的规则集,或者使用`addRule()`、`addSetProperties()`等方法...

Global site tag (gtag.js) - Google Analytics