0

次のようなXMLファイルがあります

<?xml version="1.0">
<playlist>
     <name>My Playlist</name>
     <song>
         <name>Song Name Here</name>
         <path>Path to song here</path>
         <note>Song notes here</note>
         <artist>Song artist here</artist>
         <type>Song type here</type>
     </song>
     <song>
         <name>Song Name Here</name>
         <path>Path to song here</path>
         <note>Song notes here</note>
         <artist>Song artist here</artist>
         <type>Song type here</type>
     </song>
</playlist>

xmlファイルから曲ノードを削除しようとしていますが、発生したエラーの原因を特定できません。私はまだビジュアルの基礎を学んでいます。

エラー:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

これは私のコードです

    Private Sub MsItemRemoveClick(sender As System.Object, e As EventArgs) Handles msItemRemove.Click

        If lvwPlaylist.SelectedItems.Count > 0 Then

            Dim xmlDoc As New XmlDocument

            xmlDoc.Load(_playlistpath & lblPlaylistName.Text & ".xml")

            Dim songs As XmlElement = xmlDoc.SelectSingleNode("song")

            For Each item As ListViewItem In lvwPlaylist.SelectedItems

                For Each node As XmlElement In songs

                    If node.SelectSingleNode("name").InnerText = item.SubItems(0).Text Then

                        MsgBox(node.SelectSingleNode("name").InnerText) '<------ this is where the error pops up on 'node.ParentNode.RemoveAll()

                    End If

                Next

                item.Remove()

            Next

            xmlDoc.Save(_playlistpath & lblPlaylistName.Text & ".xml")

        End If

    End Sub

私の努力は、選択したすべてのリストビューアイテムをループし、曲の名前がの曲の名前と一致する場合はsongs node、の親ノードを削除することです。name

4

1 に答える 1

1

わかりやすくするためにListViewを削除しました。

このXMLファイルの場合...

<?xml version="1.0"?>
<playlist>
     <name>My Playlist</name>
     <song>
         <name>Alpha song</name>
         <path>Path to song here</path>
         <note>Song notes here</note>
         <artist>Song artist here</artist>
         <type>Song type here</type>
     </song>
     <song>
         <name>Beta song</name>
         <path>Path to song here</path>
         <note>Song notes here</note>
         <artist>Song artist here</artist>
         <type>Song type here</type>
     </song>
     <song>
         <name>Charlie song</name>
         <path>Path to song here</path>
         <note>Song notes here</note>
         <artist>Song artist here</artist>
         <type>Song type here</type>
     </song>
     <song>
         <name>Delta song</name>
         <path>Path to song here</path>
         <note>Song notes here</note>
         <artist>Song artist here</artist>
         <type>Song type here</type>
     </song>
</playlist>

C:\ Junk \ Junk1.xmlとしてディスクに保存されたこのコードは、2つの中間ノードを見つけて削除します...

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
  Dim strFilenameIn As String = "C:\Junk\Junk1.xml"
  Dim strFilenameOut As String = "C:\Junk\Junk2.xml"

  Dim lstNames As New List(Of String)
  lstNames.Add("Beta song")
  lstNames.Add("Charlie song")

  Dim xmlDoc As New XmlDocument
  xmlDoc.Load(strFilenameIn)
  For Each strSongName As String In lstNames
    Dim xnl As XmlNodeList = xmlDoc.SelectNodes("/playlist/song/name")
    For i As Integer = xnl.Count - 1 To 0 Step -1
      Dim xnd As XmlNode = xnl(i)
      If xnd.FirstChild.Value = strSongName Then 'match'
        xmlDoc.DocumentElement.RemoveChild(xnd.ParentNode)
      End If
    Next
  Next strSongName
  xmlDoc.Save(strFilenameOut)
  MsgBox("Finished")
End Sub
于 2012-06-14T01:01:47.280 に答える