¡Tengo las manos en alto! Este es un caso clásico de hacer la pregunta incorrecta.
El problema es que no puede usar xmlpoke para eliminar un solo nodo. Xmlpoke solo se puede usar para editar el contenido de un nodo o atributo específico. No hay una forma elegante de eliminar un nodo secundario según la pregunta utilizando solo los objetivos estándar Nant. Es puede se puede hacer utilizando una manipulación de cadena poco elegante utilizando propiedades en Nant, pero ¿por qué que desea?
La mejor manera de hacerlo es escribir un objetivo simple de Nant. Aquí hay uno que preparé antes:
using System;
using System.IO;
using System.Xml;
using NAnt.Core;
using NAnt.Core.Attributes;
namespace XmlStrip
{
[TaskName("xmlstrip")]
public class XmlStrip : Task
{
[TaskAttribute("xpath", Required = true), StringValidator(AllowEmpty = false)]
public string XPath { get; set; }
[TaskAttribute("file", Required = true)]
public FileInfo XmlFile { get; set; }
protected override void ExecuteTask()
{
string filename = XmlFile.FullName;
Log(Level.Info, "Attempting to load XML document in file '{0}'.", filename);
XmlDocument document = new XmlDocument();
document.Load(filename);
Log(Level.Info, "XML document in file '{0}' loaded successfully.", filename);
XmlNode node = document.SelectSingleNode(XPath);
if(null == node)
{
throw new BuildException(String.Format("Node not found by XPath '{0}'", XPath));
}
node.ParentNode.RemoveChild(node);
Log(Level.Info, "Attempting to save XML document to '{0}'.", filename);
document.Save(filename);
Log(Level.Info, "XML document successfully saved to '{0}'.", filename);
}
}
}
Combine lo anterior con una modificación en el archivo NAnt.exe.config para cargar el objetivo de la costumbre y la secuencia de comandos siguiente en el archivo acumulación:
<xmlstrip xpath="//rootnode/childnode[@arg = 'b']" file="target.xml" />
Esto eliminará la childNode con un argumento arg con valor b de target.xm l. ¡Qué es lo que realmente quería en primer lugar!
Me salvó algo de tiempo. ¡Gracias por esto! – aleemb
Gracias por publicar la fuente. –