2013-04-18 48 views
0

我目前正在研究一個隱含XML提要解析(Atom 2005)的項目,我正在使用羅馬來做到這一點。用羅馬將SyndFeed轉換爲SyndEntry

我目前有兩種XML結構可以解析。

第一種類型:

<?xml version="1.0" encoding="UTF-8"?> 
<feed 
    xmlns="http://www.w3.org/2005/Atom" 
    xml:base="..." > 

    <id>...</id> 

    <title type="text" >...</title> 

    <entry xmlns="http://www.w3.org/2005/Atom" > 
    <id>...</id> 
    </entry> 

    <entry xmlns="http://www.w3.org/2005/Atom" > 
    <id>...</id> 
    </entry> 

    ... 
</feed> 

(一個進料,含多個條目)

第二式:

<?xml version="1.0" encoding="UTF-8"?> 

<entry xmlns="http://www.w3.org/2005/Atom" > 
    <id>...</id> 
</entry> 

(一個條目,但它不包含在「飼料「)

我的目標是製作一個bean」MyEntry「,它解析輸入XML並進入形成。我的理想是有一個構造函數(以SyndEntry作爲參數)。

我這樣做:

public MyEntry(SyndEntry e) { 
    _entry = e; 
} 

我可以得到 「SyndEntry」 對象時,我得到第一類型的XML飼料:

SyndFeedInput feed_input = new SyndFeedInput(); 
... 
SyndFeed feed = feed_input.build(xml_file); 

for (SyndEntry e : feed.getEntries()) { 
    // I can get SyndEntries from here 
} 

- >但與第二類型的XML ,沒有「feed」容器,我找不到任何直接從XML構建SyndEntry的方法(如「SyndEntryInput」?)。即使所有信息都可訪問,我會得到一個「SyndFeed」而不是「SyndEntry」。因此,我正在尋找一種方法將SyndFeed轉換爲SyndEntry(或反向),使用超類(我無法找到SyndEntry和SyndFeed共有的任何超類)或專用轉換器。我現在的解決方案是創建兩個構造函數(一個取「SyndFeed」,另一個取「SyndEntry」),但它很醜,因爲我有一個方法「getSyndData()」,它理想地返回用於構造的對象,有用的檢索通用信息(即:getSyndData()的getTitle())

任何幫助或想法,將不勝感激

+0

po可以重複使用[使用ROME獲取SyndEntry的XML字符串值](http://stackoverflow.com/questions/16187928/getting-xml-string-value-of-syndentry-with-rome) – fglez

回答