c# - Node is not removed from XmlDocument -
edit: found bug. xmlnodelist nodes = mydoc.selectnodes("//dict/dict/dict"); has wrong structure. correct xml schema "/plist/dict/dict/dict" , correct output. removing nodes still not work though end edit
in code, seems fine except nodes want delete not deleted.
xmldocument mydoc = new xmldocument(); mydoc.load(@"c:\users\boston\documents\visual studio 2010\websites\itunes\itunes music library.xml"); xmlnodelist nodes = mydoc.selectnodes("//dict/dict/dict"); response.write(nodes.count + " nodes found in xml file <hr>"); string s1; (int = 1; <= nodes.count -1; i++) { foreach (xmlelement s in nodes[i]) { s1 = s.innertext; int j = s1.compareto("location"); if (j == 0) { s1 = s.nextsibling.innertext; if (s1.contains("201.mp3")) { response.write(s1.tostring() + "<br>"); nodes[i].parentnode.removechild(nodes[i]); } } } } mydoc.save(@"c:\users\boston\documents\output4.xml"); the culprit line might this. doing wrong ?
nodes[i].parentnode.removechild(nodes[i]); a similar post how remove xmlnode xmlnodelist exist , applied syntax not work.
edit:
looks problem in line xmlnodelist nodes = mydoc.selectnodes("//dict/dict/dict");
if use //dict//dict path, same result. same case //dict path. if use "/dict/dict/" 0 results in screen print outs.
i copy piece of xml file may through light on problem.
<dict> <key>major version</key><integer>1</integer> <key>minor version</key><integer>1</integer> <key>application version</key><string>10.3.1</string> <key>features</key><integer>5</integer> <key>show content ratings</key><true/> <key>music folder</key><string>folderpath</string> <key>library persistent id</key><string>77392150b1b5ee9c</string> <key>tracks</key> <dict> <key>1791</key> <dict> <key>track id</key><integer>1791</integer> <key>name</key><string>deewana</string> <key>artist</key><string>ali azmat</string> <key>album</key><string>social circus</string> <key>genre</key><string>other</string> <key>kind</key><string>mpeg audio file</string> <key>size</key><integer>6375424</integer> <key>total time</key><integer>398288</integer> <key>track number</key><integer>1</integer> <key>year</key><integer>2005</integer> <key>date modified</key><date>2005-04-13t19:12:57z</date> <key>date added</key><date>2011-06-19t20:14:29z</date> <key>bit rate</key><integer>128</integer> <key>sample rate</key><integer>44100</integer> <key>play count</key><integer>1</integer> <key>play date</key><integer>3391853283</integer> <key>play date utc</key><date>2011-06-25t17:28:03z</date> <key>persistent id</key><string>504630d34e216d84</string> <key>track type</key><string>file</string> <key>location</key><string>filepath</string> <key>file folder count</key><integer>5</integer> <key>library folder count</key><integer>1</integer> </dict>
first of trying remove node in for/foreach loop. cannot this.
(int = 1; <= nodes.count -1; i++) { foreach (xmlelement s in nodes[i]) { nodes[i].parentnode.removechild(nodes[i]); //cannot remove element nodes[i]. } } instead can
var list = new list<xmlelement>(); (int = 1; <= nodes.count -1; i++) { foreach (xmlelement s in nodes[i]) { list.add(nodes[i]); } } foreach(var listtemp in list) { nodes.remove...(listtemp); } you need put element in temporary list , remove outside loop.
Comments
Post a Comment