Ändern eines XML über die Befehlszeile

8

Ich suche nach einer besseren Möglichkeit, ein XML zu patchen (eigentlich app.config -Datei). Genauer gesagt muss ich etwas zum Abschnitt <appConfig> hinzufügen (der möglicherweise nicht existiert), sowie einige <bindingRedirect> Elemente zu passenden Einträgen.

Ich benötige dies auch als Kommandozeilen-Tool für eine einfachere Bereitstellung.

Ich habe darüber nachgedacht, das auf verschiedene Arten zu lösen:

  1. Eine Ad-hoc-Konsolenanwendung zum Patchen der Datei mit LINQ to XML - am einfachsten
  2. Verwenden von XSLT - Speichern Sie eine Kopie des modifizierten XML, ersetzen Sie später das Original (es sei denn, es ist möglich, die Quell-XML an Ort und Stelle zu transformieren?)
  3. Unter Verwendung von XML Diff und Patch scheint das erzeugte Diffgramm jedoch auf den exakten Knoten zu verweisen Orte wie <xd:node match="1"> , etc.

Die Ad-hoc-Lösung ist die einfachste, aber ich finde es ein bisschen betrügen. Ich kenne XSLT nicht sehr gut, aber es klingt wie die beste Lösung ...

Was ist Ihrer Meinung nach das "beste Werkzeug für den Job?"

    
Igal Tabachnik 09.03.2011, 10:04
quelle

3 Antworten

4

Sie können die folgenden XSLT-Befehlszeilenprogramme für Microsoft XSLT-Prozessoren verwenden:

  1. msxsl .exe (ist seit fast 10 Jahren dort). Führt eine Transformation mit MSXML durch (Angabe verschiedener Versionen ist möglich).

  2. Oleg Tkachenkos nxslt.exe Befehlszeilen-Dienstprogramm für XslCompiledTransform - Dies ist Teil des Mvp.Xml -Projekts.

Dimitre Novatchev 09.03.2011, 14:31
quelle
4

Wenn Xslt eine Option wäre, könnten Sie MSBuild verwenden, um die Umwandlung in der Befehlszeile zu steuern.

Konfigurationsdatei app.config

%Vor%

Xslt appconfig.xslt

Dieses Beispiel xslt würde alles aus Ihrer Quelle app.config kopieren und einen Knoten <appSetting /> hinzufügen, wenn es nicht existiert:

%Vor%

MSBuild-Skript appconfig.proj

Dieses Beispiel-MSBuild-Projektscript kopiert / sichert Ihre Quelle app.config und transformiert sie mit dem angegebenen xslt-Stylesheet.

%Vor%

Ausführen von der Befehlszeile aus

<path to .NET framework 4>\MSBuild.exe appconfig.proj

    
Filburt 09.03.2011 12:40
quelle
3

Nach meiner Erfahrung könnte die Verwendung von XSLT funktionieren, aber bedenken Sie, dass Sie es auch beibehalten möchten. Es gibt ein gutes Werkzeug zum Erstellen von xslt visual namens MapForce , das ich in der Vergangenheit verwendet habe und das vielleicht helfen könnte.

Kürzlich bei der Arbeit musste ich eine ähnliche Aufgabe erledigen - XML-Datei von Format A in Format B konvertieren - mit Linq war der schnellste und einfachste warum und derzeit auch einfach zu pflegen.

Also mein Vorschlag ist, die simpelste Sache zu tun, die funktioniert und für schnelle Lösung geht, es sei denn, Sie haben klare Vorteile von der Verwendung von XSLT stattdessen.

    
Dror Helper 09.03.2011 10:36
quelle