0

我将从这个 XML/RDF 中提取值:

<?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 标题,否则获得“it”标题。我可以使用以下方法在 Poi bean 中设置标题值:

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");
...

但我不知道这是英文标题还是意大利标题。

4

2 回答 2

3

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

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

这是一个很好的链接,解释了如何做到这一点:

还有一个:

以及上述资源中所有工具的链接:

对于一个彻头彻尾的 RDF 解析器,请查看 Jena:

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

于 2012-02-26T22:13:14.003 回答
1

Commons Digester 常见问题解答说:

有时,人们会问他们如何根据属性的值触发元素的规则

使用 Digester 没有简单的方法可以做到这一点。内置的规则匹配引擎只提供匹配元素名称的能力。不支持 XPath 表达式

可以创建具有子规则的自定义“过滤”规则,并仅在设置适当条件时触发该子规则。但是,没有这种解决方案的示例。

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

于 2012-02-26T16:16:07.283 回答