2

对于一次性操作,我需要解析 XML 字符串的内容并更改“ID”字段的数字。但是,我不能冒险更改字符串的任何其他内容,例如。空格、换行符等必须保持原样!

由于我已经体验到 XmlReader 往往会弄乱空格,甚至可能重新格式化您的 XML,我不想使用它(但请随意说服我)。这也为 RegEx 尖叫,但是……我不擅长 RegEx,尤其是在 .NET 实现中。

这是字符串的一小部分,在某些情况下需要更新 ID 字段的编号。字符串中可以有许多这样的 VAR 条目。所以我需要将每个 ID 转换为 Int32,比较并修改它,然后将它放回字符串中。

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

我正在寻找最简单(就编码时间而言)和最安全的方法来做到这一点。

4

2 回答 2

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 值(仅包含数字)都被替换。如果您不想更改它,您还可以将那一点“额外智能”构建到匹配评估器函数中,并使其返回匹配不变。

于 2008-11-03T14:15:50.603 回答
0

看看XmlDocument类中的这个属性PreserveWhitespace

于 2008-11-03T14:18:38.820 回答