代码之家  ›  专栏  ›  技术社区  ›  Naveen

转换XML流中的特殊字符

  •  0
  • Naveen  · 技术社区  · 16 年前

    我有一个xml流,它包含存储在cstring对象中的特殊字符。除了替换流中的单个字符之外,是否有其他方法来转换这些特殊字符?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Mihai Nita    16 年前

    唯一需要转义的字符是“<>&。

    但我建议使用标准的xml库。 这不仅会处理转义,还会处理很多其他问题(编码、实体、验证等)。

        2
  •  0
  •   Diego Sevilla    16 年前

    坦率地说,我看没有别的选择。

        3
  •  0
  •   Aaron Digulla    16 年前

    如果可以,请在编写器中安装筛选器。这允许您逐字符编写流,并在遇到特殊字符时替换它们(省去了分配第二个字符串对象的麻烦)。

    尝试一次输出尽可能多的字符串字符,因为在循环中为每个字符调用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) 然后,您可以分配一个新的副本。但是,因为只有在字符串中有特殊字符时才会发生这种情况,所以这比为每个字符串创建一个副本要便宜得多。