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 に答える