8
votes

Modification d'une ligne XML via la ligne de commande

Je cherche un meilleur moyen de corriger un XML (en fait, app.config fichier). Plus spécifiquement, j'ai besoin d'ajouter quelque chose à la section (qui pourrait n'exurer), ainsi que plusieurs éléments pour correspondre aux entrées.

J'en ai aussi besoin d'un outil de ligne de commande, pour faciliter le déploiement.

J'ai pensé à résoudre ce problème de plusieurs manières:

  1. une application de console ad-hoc pour corriger le fichier avec Linq à XML - plus facile
  2. Utilisation de xslt - Enregistrez une copie du XML modifié, remplaçant ultérieurement l'original (sauf s'il est possible de transformer la source xml in-place?)
  3. en utilisant Diff et patch XML , mais il semble que le diffgramme produit fait référence aux emplacements des nœuds exacts, tels que , etc.

    La solution ad-hoc est la plus facile, mais je pense que c'est un peu tricher. Je ne connais pas très bien xslt, mais cela ressemble à la meilleure solution ...

    Quoi, à votre avis, est le "meilleur outil pour le travail?"


1 commentaires

Bonne question, +1. Consultez ma réponse pour des liens vers deux utilitaires de ligne de commande XSLT utilisant des processeurs Microsoft XSLT. Si vous auriez besoin du code XSLT exact, veuillez publier un exemple de document XML et également le résultat exact que vous souhaitez de la transformation.


3 Réponses :


3
votes

Dans mon expérience en utilisant XSLT pourrait travailler mais garder à l'esprit que vous souhaitez le maintenir aussi. Il y a un bon outil pour la construction de xslt visuel appelé MapForce J'ai utilisé dans le passé qui pourrait aider.

Récemment au travail, je devais faire une tâche similaire - convertir un fichier XML du format A au format B - à l'aide de Linq était la meilleure et la plus facile pourquoi et actuellement facile à entretenir.

Donc, ma suggestion est la chose simulte qui fonctionne et opte pour une solution rapide, à moins que vous n'ayez des avantages clairs de l'utilisation de XSLT.


2 commentaires

Toute langue que vous connaissez bien serait plus rapide qu'une langue que vous ne connaissez pas. En général, en utilisant Linq comme sélecteur, puis apportant des modifications avec des méthodes LINQ / DOM, il sera moins puissant (sémitiquement) que XSLT (de la même manière que la comparaison de XQUERY avec XSLT), ce qui signifie que vous aurez un code LINQ plus complexe que XSLT fiche de style.


@Alejandro - Vous avez raison - mais si les transformations sont assez simples, je ne vois pas le point d'utiliser XSLT lorsque deux lignes de Linq suffiraient



4
votes

Si vous utilisez XSLT serait une option que vous pourriez utiliser MsBuild pour piloter la transformation sur la ligne de commande.

fichier de configuration app.config xxx

xslt appconfig.xslt

Cet exemple de xslt copierait tout de votre source app.config et ajoutez un nœud si elle n'existe pas: xxx

script msbuild appconfig.proj

Cet exemple de script de projet MsBuild copiera / sauvegardera votre source. app.config et transformez-le avec la feuille de style xslt donné. xxx

l'exécutant de la ligne de commande

\ msbuild.exe appconfig.proj


2 commentaires

Wow, c'est extrêmement cool! Je n'ai même jamais pensé à appliquer Msbuild pour ça!


@HMEMCY Je suppose que votre problème consistait à construire votre demande afin que Msbuild soit parfaitement adapté. Vous trouverez de nombreux exemples pour modifier les fichiers de configuration pendant la construction.



4
votes

Vous pouvez utiliser les utilitaires de ligne de commande XSLT suivants pour les processeurs Microsoft XSLT:

  1. msxsl.exe (existe-t-il depuis près de 10 ans). Effectue une transformation à l'aide de MSXML (spécifiant différentes versions est possible).

  2. NXSLT.exe de oleg Tkachenko Utilitaire de ligne de commande pour XslCompiledTransform - Cela fait partie de la mvp.xml projet .


0 commentaires