2012-02-26 69 views
0

我会从这个XML中提取值/ RDF:在XML使用org.apache.commons.digester.Digester与属性

<?xml version="1.0" encoding="UTF-8"?> 
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:j.0="urn:turismoculturale.itdc.filas-1.0.0-RC1#"> 
<j.0:Chiesa rdf:ID="turismoCulturale_POI_880"> 
    <j.0:title xml:lang="en">Church of S. Giuda Taddeo or S. Onofrio - Gaeta</j.0:title> 
    <j.0:title xml:lang="it">Chiesa S. Giuda Taddeo o S. Onofrio - Gaeta</j.0:title> 
</j.0:Chiesa> 
</rdf:RDF> 

我想获得EN冠军时,我在“EN “语言和”它“的标题,否则。我能够通过设置在POI豆标题值:

Digester digester = new Digester(); 
digester.setNamespaceAware(true); 
digester.setRuleNamespaceURI("urn:turismoculturale.itdc.filas-1.0.0-RC1#"); 
digester.addObjectCreate("*/Chiesa", Poi.class); 
digester.addBeanPropertySetter("*/title", "title"); 
... 

,但我不知道这是否是英文标题或意大利的一个。

回答

3

好的 - 首先,不要尝试用XML解析器解析RDF/XML。它永远不会工作,因为XML文档的语义与RDF/XML无关,并且它是一个坏主意(如果您知道RDF/XML的工作原理),尤其是在您动态生成RDF/XML的情况下(你可以通过命名空间来判断)。您需要使用RDF解析器来解析RDF。

因此,这意味着不要使用XML到Java对象映射工具,请使用RDF到Java对象映射工具。

这里是一个伟大的链接解释如何做到这一点:

而另:

随着链接到所有的工具在th Ë上述资源:

用于O UT进出的RDF分析器,看看耶拿:

这是一个Apache项目,它也很好地Maven'ed了。

1

Commons Digester FAQ说:

偶尔,有人问他们怎么能基于属性的值触发一个规则的元素

有没有简单的方法用沼气池做到这一点;内置的规则匹配引擎只能提供匹配元素名称的功能。没有可用的XPath表达式支持

可能可以创建具有子规则的自定义“过滤”规则,并且只有在设置了适当的条件后才触发该子规则。然而,没有这种解决方案的例子。

消化器不是一个很好的工具。这太简单了。考虑使用更全面的基于事件的API,如StAX。