xml 字符替换,过滤问题

请问:

xml中的"<",">" 怎么替换。
如果用这种方式str = str.Replace("<", "&lt;");
  str = str.Replace(">", "&gt;");
替换的话。

如:
<name>张<三<name>
替换后
&ltname&gt张&lt三&ltname&gt

实际只要:
<name>张&lt三<name>

谢谢

作者: xingn   发布时间: 2011-06-16

xml不会出现"<"">"的,没有替换的问题啊
就是生成的时候加">",会自动替换的。

作者: Liuzhc   发布时间: 2011-06-16

个人思路:
从单纯的处理字符串的角度,可以理解为:在<与>配对的基础上,把所有不能配对的<或者>替换为&lt;或&gt;。

1. 对于<与>的配对,我最常用的算法是Stack。遇到<就Push,遇到>就Pop。
2. 出现连续的两个<,就把后一个换成"&lt;"进行Push;出现两个连续的>,就把出现的前一个>替换为"&gt;"
3. 每次Pop时,注意用作输出值的字符串与Pop出的值的连接顺序。

我没想太细,你自己再完善一下吧。

作者: Abbey   发布时间: 2011-06-16

用正则表达式替换。

C# code

static void Main(string[] args)
{
    var replaceTable = new Dictionary<string, string>();
    replaceTable.Add("<", "&lt;");
    replaceTable.Add(">", "&gt;");

    var result = ReplaceXml("<name>张<三</name>", replaceTable);
    Console.WriteLine(result);

    Console.Read();
}

static string ReplaceXml(string xml, Dictionary<string, string> replaceTable)
{ 
    Regex regex = new Regex(@"(?<=<(\w+)>).*(?=<\/\1>)");
    MatchEvaluator matchReplace = delegate(Match match)
    {
        string result = match.Groups[0].Value;
        foreach (var kv in replaceTable)
            result = result.Replace(kv.Key, kv.Value);
        return result;
    };
    return regex.Replace(xml, matchReplace);
}

作者: fangxinggood   发布时间: 2011-06-16

用正则 组

作者: sugarbelle   发布时间: 2011-06-16

(?<=>[^>]*)<(?=[^<]*<)

作者: q107770540   发布时间: 2011-06-16