2008-11-03 58 views
2

对于一步法操作格式化为XML(C#)的字符串,我需要解析的XML字符串的内容,并改变它的“ID”字段的数目肮脏的方式。但是,我不能冒险改变字符串的其他内容,例如。空白,换行符等等必须保持原样!快速和更新“的ID”中

因为我已经作出的XmlReader趋于混乱空白了,甚至有可能重新格式化你的XML我不想使用它(但随时否则说服我)的体验。这也为RegEx尖叫,但是...我不擅长RegEx,特别是没有.NET实现。

这里的字符串的短的部分,需要在某些情况下要更新的ID字段的数量。字符串中可以有很多这样的VAR条目。所以我需要将每个ID转换为Int32,比较&修改它,然后将其放回到字符串中。

<VAR NAME="sf_name" ID="1001210"> 

我正在寻找最简单的(在编码时间方面)和最安全的方式做到这一点。

回答

4

你正在寻找的正则表达式是:

ID="(\d+)" 

比赛第1组将包含数字。使用MatchEvaluator Delegate替换动态计算替换的匹配项。

Regex r = new Regex("ID=\"(\\d+)\""); 
string outputXml = r.Replace(inputXml, new MatchEvaluator(ReplaceFunction)); 

其中ReplaceFunction是这样的:

public string ReplaceFunction(Match m) 
{ 
    // do stuff with m.Groups(1); 
    return result.ToString(); 
} 

如果你需要我可以展开正则表达式更具体地匹配。目前全部 ID值(仅包含数字)被替换。您还可以将这一点“额外智能”构建到匹配评估器函数中,并在不想更改的情况下使其返回未改变的匹配。

+0

谢谢!奇迹般有效。只有轻微的错误是缺少\在正则表达式的字符串: “ID = \”(\ d +)\ “” ......应该是 “ID = \”(\\ d +)\ “” – steffenj 2008-11-03 14:34:18