クイック& “ ID”を更新する汚い方法XML(C#)としてフォーマットされた文字列

StackOverflow https://stackoverflow.com/questions/258694

質問

ワンショット操作の場合、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));

where ReplaceFunction は次のようなものです:

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

必要に応じて、より具体的に一致するように正規表現を展開できます。現在、すべてのID値(数字のみを含む)は置き換えられます。 「余分なインテリジェンス」のビットを構築することもできます。一致エバリュエーター関数に追加し、変更したくない場合は変更せずに一致を返すようにします。

他のヒント

このプロパティをご覧ください PreserveWhitespace XmlDocument クラス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top