2015-03-13 75 views
2

我目前正在嘗試解析日文JMdict xml文檔,並且它聲明瞭整個文檔中使用的一堆ENTITY引用。
像這一位在這裏:XStream實體abbrieviation解析

<!ENTITY MA "martial arts term"> 
<!ENTITY X "rude or X-rated term (not displayed in educational software)"> 
<!ENTITY abbr "abbreviation"> 
<!ENTITY adj-i "adjective (keiyoushi)"> 
<!ENTITY adj-ix "adjective (keiyoushi) - yoi/ii class"> 

有在XML然後引用像這樣<field>&MA;</field>

XStream的不喜歡這一點,我解決這個需求,然後迅速拋出一個ConversionException和退出。

有沒有辦法自動識別這些實體並將它們交換出來?
我寧願不必寫170線xml = xml.replace(one, other);

我只是用XPP3然後註釋的數據創建的POJO開始用的。沒有自定義分析器。

回答

2

既然你說你正在使用XPP3,我假設你正在創建你的XStream的對象是這樣的:

XStream xstream = new XStream(); //uses XPP3 

的問題是,XPP3顯然does not resolve entities開箱:

...解決實體引用是用戶的責任。

所以,除非你想實現實體解析,你需要使用解析器來解析實體。如果你想留在拉解析器,你可以使用StAX這樣的:

XStream xstream = new XStream(new StaxDriver()); 

另外,您可以使用DOM(不是拉解析器;加載整個文檔到內存):

XStream xstream = new XStream(new DomDriver()); 
+0

謝謝你這麼多,StaxDriver工作得很好! – Bjorninn 2015-03-13 23:27:17

+0

很高興能幫到你! – dbank 2015-03-13 23:29:36