2009-02-11 32 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库。 这不仅将采取逃避的照顾,但很多其他问题(编码,实体,验证等)