2011-06-16 38 views
1

我用下面的方法通過Web從XML文檔的文本行改爲:CharacterData忽略非轉義字符

public static String getCharacterDataFromElement(Element e) { 
    Node child = ((Node) e).getFirstChild(); 
    if (child instanceof CharacterData) { 
     CharacterData cd = (CharacterData) child; 
     return cd.getData(); 
    } 
    return ""; 
} 

它工作正常,但如果它遇到一個字符,如一個不是像&等寫的&符號,它會完全忽略該字符和該行的其餘部分。我能做些什麼來糾正這一點?

+1

如果您有一個未轉義的&符號(它本身不會啓動轉義序列),那麼您擁有的內容不是格式良好的XML,並且XML處理器**必須* *表示錯誤。 – 2011-06-16 11:17:49

回答

3

唯一正確的解決方案是修正XML,以便&被寫爲&amp;,或者文本被封裝在<![CDATA[ ... ]]>中。

它實際上不是XML,除非您轉義符號或使用CDATA。

+0

不幸的是我無法控制XML。這基本上是一個新聞提要。我的問題只出現在新聞標題的標題中。其餘的XML格式正確。 :( – 2011-06-16 11:23:33

+0

您是否嘗試過聯繫供稿的所有者並報告錯誤? – RoToRa 2011-06-16 11:24:26

+0

不,我想這是我必須要做的事情。供稿實際上是用WordPress構建的,您會認爲WordPress供稿會被正確構建。 – 2011-06-16 11:27:56

0

我懷疑輸入不健全的說法是紅鯡魚。如果源文檔包含實體引用,那麼元素可能包含多個文本節點子元素,而您的代碼只能讀取其中的第一個元素。它需要全部閱讀。我認爲在DOM中獲取節點的文本內容比較簡單,但我不確定,如果我能避免它,我從不使用DOM,因爲它使一切都變得如此困難。使用JDOM或XOM更好)