【问题标题】:Using org.apache.commons.digester.Digester in XML with attributes在带有属性的 XML 中使用 org.apache.commons.digester.Digester
【发布时间】:2012-02-26 15:48:03
【问题描述】:

我将从这个 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");
...

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

【问题讨论】:

    标签: java xml rdf apache-commons-digester


    【解决方案1】:

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

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

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

    还有一个:

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

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

    这是一个 Apache 项目,也很好地 Maven 升级。

    【讨论】:

      【解决方案2】:

      Commons Digester FAQ 说:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-10-01
        • 2018-06-21
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多