对于一次性操作,我需要解析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 课程

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top