Frage

Für einen One-Shot-Betrieb, ich brauche den Inhalt einer XML-Zeichenfolge zu analysieren und die Zahlen des „ID“ Feldes ändern. Allerdings kann ich nicht riskieren, etwas anderes von der Zeichenfolge zu ändern, zum Beispiel. Leerzeichen, Zeilenumbrüche usw. müssen bleiben, wie sie sind!

Da ich die Erfahrung gemacht habe, dass XmlReader zu Chaos Leerzeichen neigt und kann sogar neu formatiert XML-ich will nicht, es zu benutzen (aber das Gefühl frei, mich vom Gegenteil zu überzeugen). Das schreit auch für RegEx aber ... ich bei RegEx bin nicht gut, vor allem nicht mit der .NET-Implementierung.

Hier ist ein kurzer Teil der Zeichenfolge, muss die Anzahl der ID-Feld in einigen Fällen aktualisiert werden. Es kann viele solche VAR Einträge in der Zeichenfolge sein. Also muss ich jede ID Int32 konvertieren, zu vergleichen, und es ändern, es dann in den String zurückstellen.

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

Ich bin für die einfachste (in Bezug auf die Codierung Zeit) und sicherste Weg, dies zu tun.

War es hilfreich?

Lösung

Die RegexMuster Sie suchen ist:

ID="(\d+)"

Match Gruppe 1 würde die Zahl enthalten. Verwenden Sie ein MatchEvaluator Delegate Spiele zu ersetzen dynamisch Ersatz berechnet.

Regex r = new Regex("ID=\"(\\d+)\"");
string outputXml = r.Replace(inputXml, new MatchEvaluator(ReplaceFunction));

wo ReplaceFunction ist so etwas wie folgt aus:

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

Wenn Sie ich kann die Regex erweitern genauer anzupassen. Aktuell alle ID-Werte (die nur Zahlen enthalten) ersetzt werden. Sie können auch das bisschen „extra Intelligenz“ in Spielauswertungsfunktion bauen und das Spiel unverändert lassen zurück, wenn Sie es nicht ändern wollen.

Andere Tipps

Schauen Sie sich auf diese Eigenschaft PreserveWhitespace XmlDocument Klasse

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top