2012-02-26 66 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。