Duplicata possible:
Comment supprimer un XmlNode de XmlNodeList
Salut, Comment puis-je supprimer un ensemble de nœuds d'un fichier XML.? Voici un extrait de code.
string path = @"C:\Documents and Settings\e454935\Desktop\NUnitSettings.xml";
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.Load(fs);
fs.Close();
xmldoc.DocumentElement.RemoveChild(xmldoc.DocumentElement.ChildNodes[1]);
FileStream WRITER = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);
xmldoc.Save(WRITER);
WRITER.Close();
J'ai essayé le code suivant simplement pour supprimer un nœud et j'ai obtenu "Référence d'objet non définie sur une instance d'un objet." à
xmldoc.DocumentElement.RemoveChild(xmldoc.DocumentElement.ChildNodes[1]);
Voici un exemple de fichier XML,
<?xml version="1.0"?>
<Xml1>
<Settings>
<Setting name="DisplayFormat" value="Full" />
<Setting name="File1" value="a" />
<Setting name="File1" value="b" />
<Setting name="File1" value="c" />
<Setting name="File1" value="d" />
</Settings>
</Xml1>
En fait, dans ce fichier, je veux supprimer les quatre nœuds File1 qui ont les valeurs "a, b, c, d" et ensuite je veux ajouter un nœud ,
<Setting name="File1" value="e" />
Comment puis-je faire ceci.?
Il peut être plus facile d'utiliser XPath pour localiser les nœuds que vous souhaitez supprimer. Ce thread stackoverflow pourrait vous donner quelques idées.
Dans votre cas, vous trouverez les quatre nœuds que vous souhaitez utiliser avec cette expression:
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlNodeList nodes = doc.SelectNodes("//Setting[@name='File1']");
Vous pouvez utiliser Linq to XML pour ce faire:
XDocument doc = XDocument.Load("input.xml");
var q = from node in doc.Descendants("Setting")
let attr = node.Attribute("name")
where attr != null && attr.Value == "File1"
select node;
q.ToList().ForEach(x => x.Remove());
doc.Save("output.xml");
Suppression de nœuds de XML
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList nodes = doc.SelectNodes("//Setting[@name='File1']");
for (int i = nodes.Count - 1; i >= 0; i--)
{
nodes[i].ParentNode.RemoveChild(nodes[i]);
}
doc.Save(path);
Ajout d'attribut aux nœuds en XML
XmlDocument originalXml = new XmlDocument();
originalXml.Load(path);
XmlNode menu = originalXml.SelectSingleNode("//Settings");
XmlNode newSub = originalXml.CreateNode(XmlNodeType.Element, "Setting", null);
XmlAttribute xa = originalXml.CreateAttribute("name");
xa.Value = "qwerty";
XmlAttribute xb = originalXml.CreateAttribute("value");
xb.Value = "555";
newSub.Attributes.Append(xa);
newSub.Attributes.Append(xb);
menu.AppendChild(newSub);
originalXml.Save(path);
DocumentElement
est le nœud racine du document donc childNodes[1]
n'existe pas dans ce document. childNodes[0]
serait le nœud <Settings>