편집 : 버그를 발견했습니다. XmlNodeList nodes = mydoc.SelectNodes ("// dict/dict/dict"); 구조가 잘못되었습니다. 올바른 XML 스키마는 "/ plist/dict/dict/dict"이며 올바른 출력을 얻습니다. 노드를 제거해도 여전히 작동하지 않습니다. 끝 편집노드가 XmlDocument에서 제거되지 않았습니다.
내 코드에서 삭제하려는 노드가 삭제되지 않는다면 모든 것이 잘된 것처럼 보입니다.
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 the xml file <hr>");
string s1;
for (int i = 1; i <= 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");
범인 줄은 이것 일 수 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까 ?
nodes[i].ParentNode.RemoveChild(nodes[i]);
유사한 게시물 How to remove an XmlNode from XmlNodeList이 있으며 해당 구문을 적용했지만 작동하지 않습니다.
편집 : 문제가 라인 XmlNodeList에서처럼
이 보이는 노드 =의 mydoc.SelectNodes ("// 딕셔너리/DICT/DICT");
// dict // dict 경로를 사용하면 거의 동일한 결과를 얻습니다. // dict 경로도 마찬가지입니다. "/ dict/dict /"를 사용하면 화면 출력에 0 결과가 표시됩니다.
일부 문제를 해결할 수있는 XML 파일을 복사합니다.
<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>
답변이 제공됩니까? –
아니요 XML 파일 (위의 스 니펫)이 다른 형식을 갖고 있기 때문에 아니요. 내가 원하는 노드에 도달하기 위해 요점까지 작업했습니다. 노드를 제거하는 것은 여전히 문제입니다. 위 코드와 XML 파일을 제공하고 있습니다. 감사합니다 –
코드 스니퍼가 정확 했습니까?이 제대로 종료되지 않았습니다. 실수로 그랬습니다. 그리고 또한 여러 뿌리가 있습니다. –