webForumDet fria alternativet

XmlDocument & XmlTextReader

4 svar · 200 visningar · startad av peterbladh

peterbladhMedlem sedan juni 2000277 inlägg
#1

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!

peterbladhMedlem sedan juni 2000277 inlägg
#2

... 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.

peterbladhMedlem sedan juni 2000277 inlägg
#3

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...

developerMedlem sedan aug. 2001458 inlägg
#4

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

peterbladhMedlem sedan juni 2000277 inlägg
#5

Ok, jag redigerar...

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)