快速&在格式化为XML(C#)的字符串中更新“ID”的脏方法
题
对于一次性操作,我需要解析XML字符串的内容并更改“ID”的数字。领域。但是,我不能冒险改变字符串的任何其他内容,例如。空白,换行等必须保持原样!
由于我已经获得了XmlReader容易混乱空白的经验,甚至可能重新格式化你的XML我不想使用它(但随意说服我)。这也让RegEx感到尖叫,但是......我不擅长RegEx,特别是不支持.NET实现。
这是字符串的一小部分,在某些情况下需要更新ID字段的编号。字符串中可以有许多这样的VAR条目。所以我需要将每个ID转换为Int32,比较&修改它,然后把它放回到字符串中。
<VAR NAME="sf_name" ID="1001210">
我正在寻找最简单的(就编码时间而言)和最安全的方法。
解决方案
您正在寻找的正则表达式模式是:
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值(仅包含数字)将被替换。你也可以构建那种“额外的智能”。进入匹配评估函数,如果你不想改变它,使它返回不变的匹配。
其他提示
查看此属性 PreserveWhitespace 在 XmlDocument 课程
不隶属于 StackOverflow