我目前解析XHTML文檔與DOM解析器,如:Java的XML解析:避免實體引用解析
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
final DocumentBuilder db = dbf.newDocumentBuilder();
db.setEntityResolver(MY_ENTITY_RESOLVER);
db.setErrorHandler(MY_ERROR_HANDLER);
...
final Document doc = db.parse(inputSource);
而我的問題是,當我的文檔包含好像是實體引用,例如:
<p>€</p>
我的解析器爲包含「€」而不是「& euro;」的內容創建了一個Text節點。這就是說,它正在以應有的方式解決實體(XHTML 1.0 Strict DTD鏈接到ENTITIES Latin1 DTD,後者又建立了「& euro」與「€」的等價關係)。
問題是,我不希望解析器做這樣的事情。 我想保留「&歐元」;文字未修改。
我已經試過:
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
但是:
我不喜歡這一點,因爲我擔心這可能使一些解析器實現不導航從XHTML 1.0嚴格的DTD到實體Latin1 DTD,因此不考慮「&歐元;」作爲宣佈爲實體。
當我這樣做時,它奇怪地創建了兩個節點:一個「磅」實體節點和一個帶有「€」符號的文本節點。
任何想法?是否有可能在一個DOM解析器,而不訴諸預處理的XHTML而代所有的「&」符號的東西,其他的?配置此...
解決方案可能是一個DOM解析器或者也可以是SAX之一,我不介意使用SAX解析,然後使用轉換創建我的DOM ...
另外,我無法切換到非標準XML解析庫。沒有jdom,沒有jsoup,沒有HtmlCleaner等。
非常感謝。
_My解析器創建你如何測試這個文本節點.._? – Wivani