2009-02-11 29 views
0

我有一個XML流,其中包含特殊字符,如'存儲在一個CString對象。除了替換流中的單個字符以轉換這些特殊字符之外,是否還有其他方法?轉換XML流中的特定字符

+0

轉換爲什麼? – 2009-02-11 07:44:10

+0

例如撇號需要轉換爲' – Naveen 2009-02-11 07:45:51

回答

0

我坦率地沒有看到另一個選項。

0

如果可以,請在編寫器中安裝過濾器。這使您可以通過字符寫入流char,並在遇到它們時替換特殊字符(從而不必分配第二個字符串對象)。

嘗試儘可能多地輸出儘可能多的字符串,因爲在循環中爲每個字符調用write()代價很高。相反,使用此僞代碼:

int start = 0; 
for (int i=0; i<str.length(); i++) { 
    char c = str.getChar(i); 
    String emit = null; 
    switch (c) { 
    case '<': emit = "&lt;"; break; 
    case '>': emit = "&gt;"; break; 
    case '\'': emit = "&apos;"; break; 
    case '"': emit = "&quot;"; break; 
    } 
    if (emit != null) { 
     write(str,start,i); 
     start = i; 
     write(emit); 
    } 
} 
if (start != str.length()) { 
    write(str); 
} 

在通常情況下,循環會遍歷字符串一次(這是快),一旦調用write()。

如果您無法在編寫器中安裝過濾器,則可以使用相同的代碼來過濾字符串。在常見情況下,您只需返回輸入字符串。在if (emit != null)中,您可以分配一個新副本。但是,因爲這隻會在字符串中有特殊字符時纔會發生,這比爲每個字符串創建一個副本要便宜得多。

3

需要轉義字符只有「<> &。

但我會建議使用標準XML庫。 這不僅將採取逃避的照顧,但很多其他問題(編碼,實體,驗證等)