c# - node - Eliminar XML utilizando un Xpath seleccionado y un bucle for
xpath expression example (3)
¿Por qué no usar XDocument
?
var xmlText = "<Elements><Element1 /><Element2 /></Elements>";
var document = XDocument.Parse(xmlText);
var element = document.XPathSelectElement("Elements/Element1");
element.Remove();
var result = document.ToString();
result
será <Elements><Element2 /></Elements>
.
O:
var document = XDocument.Load(fileName);
var element = document.XPathSelectElement("Elements/Element1");
element.Remove();
document.Savel(fileName);
[Editar] Para .NET 2, puedes usar XmlDocument
:
XmlDocument document = new XmlDocument();
document.Load(fileName);
XmlNode node = document.SelectSingleNode("Elements/Element1");
node.ParentNode.RemoveChild(node);
document.Save(fileName);
[EDITAR]
Si necesita eliminar todos los elementos y atributos secundarios:
XmlNode node = document.SelectSingleNode("Elements");
node.RemoveAll();
Si necesita conservar atributos, pero eliminar elementos:
XmlNode node = document.SelectSingleNode("Elements");
foreach (XmlNode childNode in node.ChildNodes)
node.RemoveChild(childNode);
Actualmente tengo el siguiente código:
XPathNodeIterator theNodes = theNav.Select(theXPath.ToString());
while (theNodes.MoveNext())
{
//some attempts i though were close
//theNodes.RemoveChild(theNodes.Current.OuterXml);
//theNodes.Current.DeleteSelf();
}
Configuré xpath a lo que deseo devolver en xml y deseo eliminar todo lo que se haya enlazado. He intentado algunas formas de eliminar la información, pero no me gusta mi sintaxis. Encontré un ejemplo en el soporte de Microsoft: http://support.microsoft.com/kb/317666 pero me gustaría usar esto en vez de uno para cada uno.
Cualquier comentario o pregunta es apreciado.
Puede usar XmlDocument
:
string nodeXPath = "your x path";
XmlDocument document = new XmlDocument();
document.Load(/*your file path*/);//or document.LoadXml(...
XmlNode node = document.SelectSingleNode(nodeXPath);
if (node.HasChildNodes)
{
//note that you can use node.RemoveAll(); it will remove all child nodes, but it will also remove all node'' attributes.
for (int childNodeIndex = 0; childNodeIndex < node.ChildNodes.Count; childNodeIndex++)
{
node.RemoveChild(node.ChildNodes[childNodeIndex]);
}
}
document.Save("your file path"));
string nodeXPath = "your x path";
XmlDocument document = new XmlDocument();
document.Load(/*your file path*/);
XmlNode node = document.SelectSingleNode(nodeXPath);
node.RemoveAll();
XmlNode parentnode = node.ParentNode;
parentnode.RemoveChild(node);
document.Save("File Path");