Hej
Jag jobbar i Compact Framework och har ett Xml Document som jag vill ta bort ett element + subelement i.
Jag har testat att iterera (Read()) en XmlTextReader och när jag kommer fram till rätt element köra load på ett XmlDocument. Följande fel uppstår då:
System.InvalidOperationException:this document already has a document element node
Här är koden:
public void DeleteView(string viewName)
{
XmlDocument xdoc = new XmlDocument();
XmlTextReader xtr = new XmlTextReader(FILEPATH);
xtr.MoveToContent();
while(xtr.Read())
{
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "View")
{
if (viewName == xtr.GetAttribute("name"))
{
xdoc = new XmlDocument();
xdoc.Load(xtr);
xdoc.RemoveAll();
xdoc.Save(FILEPATH);
break;
}
}
}
}
Det är på raden >> xdoc.Load(xtr); << som felet uppstår.
Tacksam för hjälp!
... Jag vet att anledningen till att det blir fel är att det finns flera element i dokumentet heter "view", men det skall det ju, så jag behöver alltså hjälp att kringgå det.
Hittade även ett annat problem; raden >> xdoc.Save(FILEPATH);
<< sparar ju inte rätt grejer (det genereras ett felmeddelande - ... the document doesn't have a root element). Hur gör jag för att spara "rätt"? Alltså allt förutom det jag tog bort.
Jag löste det på ett annat sätt;
XmlDocument doc = new XmlDocument();
doc.Load(FILEPATH);
XmlNodeList list = doc.GetElementsByTagName("View");
for (int i=0; i<list.Count; i++)
{
XmlElement elem = (XmlElement)list.Item(i);
if (elem.GetAttribute("name") == viewName)
{
doc.DocumentElement.RemoveChild((XmlNode)elem);
doc.Save(FILEPATH);
break;
}
}
Är iof fortfarande intresserad av hur man löser det med det första sättet - kan vara bra nån gång, kanske...
Använd [ kod ] taggen när du postar kod, så blir det lättare att läsa, se: http://www.webforum.nu/misc.php?s=&action=bbcode