2008-12-11 11 views

Répondre

3

XmlPoke ne fonctionnera certainement pas car le xpath doit correspondre à quelque chose en premier lieu pour pouvoir le remplacer. La seule façon que je sais de le faire est de créer votre propre tâche qui vous permettrait d'ajouter des données à un fichier XML. Ces nouvelles tâches peuvent être soit construire séparément et ajoutés à NAnt en copiant dll dans NAnt \ bin, ou par l'extension NAnt directement à partir de vos fichiers de construction

Les informations que vous avez commencé se trouve sur <script/> Task

Si vous arriver à rendre cette tâche assez générique, il pourrait être bon d'essayer de le soumettre à NAntContrib afin que tout le monde en profite.

3

J'ai fait quelque chose de similaire récemment. Ceci est pour l'insertion de nœuds, mais devrait être facilement modifié.

<script language="C#" prefix="test" > 
     <references> 
      <include name="System.Xml.dll" /> 
     </references> 
     <code> 
      <![CDATA[ 
       [TaskName("xmlinsertnode")] 
       public class TestTask : Task { 
       #region Private Instance Fields 
       private string _filename; 
       private string _xpath; 
       private string _fragment; 
       #endregion Private Instance Fields 

       #region Public Instance Properties 
       [TaskAttribute("filename", Required=true)] 
       public string FileName { 
        get { return _filename; } 
        set { _filename = value; } 
       } 

       [TaskAttribute("xpath", Required=true)] 
       public string XPath { 
        get { return _xpath; } 
        set { _xpath = value; } 
       } 

       [TaskAttribute("fragment", Required=true)] 
       public string Fragment { 
        get { return _fragment; } 
        set { _fragment = value; } 
       } 

       #endregion Public Instance Properties 

       #region Override implementation of Task 
       protected override void ExecuteTask() { 
        System.Xml.XmlDocument document = new System.Xml.XmlDocument(); 
        document.Load(_filename); 
        System.Xml.XPath.XPathNavigator navigator = document.CreateNavigator(); 
        navigator.SelectSingleNode(_xpath).AppendChild(_fragment); 
        document.Save(_filename); 
       } 
       #endregion Override implementation of Task 
       } 
      ]]> 
     </code> 
    </script> 
Questions connexes