我正在使用Visual Studio 2010并在VB中编码。
我有一个由XML文件填充的ListBox。 我设法让“全部删除”工作,但我无法让“删除单一”工作。不确定如何从节点列表中的节点获取属性值。 我需要将书签元素的title属性与lstBookmarks.Text匹配,后者保存列表框所选项目的文本。
突出显示删除需要发生的位置(至少对我的代码而言)。 只要有解释,我很乐意接受完全重写的代码。
我的XML看起来像这样
<Data>
<Bookmark title="Page 1" link="Some File Path Here" />
<Bookmark title="Page 2" link="Some Other File Path Here" />
</Data>
我的删除看起来像这样
Private Sub DeleteToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles DeleteToolStripMenuItem.Click
If lstBookmarks.SelectedIndex = -1 Then
MessageBox.Show("There are no bookmarks to clear!")
ElseIf lstBookmarks.SelectedValue.ToString() = "" Then
MessageBox.Show("There are no bookmarks to clear!")
Else
Dim xmlFile As String = filePath & "Resources\bookmark.xml"
Dim XMLDoc As XmlDocument = New XmlDocument
Dim nodes As XmlNodeList
XMLDoc.Load(xmlFile)
nodes = XMLDoc.SelectNodes("Data")
Dim RootElement As XElement = XElement.Load(xmlFile)
Dim DataElement As XmlElement = XMLDoc.DocumentElement
Dim NewElement As XmlElement = XMLDoc.CreateElement("Bookmark")
Dim FindElement = RootElement.<Bookmark>.Attributes("title")
If DataElement.HasChildNodes Then
For Each Attribute In FindElement
If Attribute = lstBookmarks.Text Then
'************************************************
'Match found, delete node or XML Element here
'************************************************
Else
'No Match in XML, no need to delete
End If
Next
End If
End If
End Sub
答案 0 :(得分:1)
要使用XmlDocument
类查找元素,您可以使用XPath轻松完成,如下所示:
Dim xPath As String = String.Format("/Data/Bookmark[@title='{0}']", lstBookmarks.Text)
Dim theNode As XmlNode = XMLDoc.SelectSingleNode(xPath)
或者,您可以使用LINQ to XML使用XDocument
或XElement
类来查找它:
Dim theElement As XElement = RootElement.<Bookmark>.First(Function(x) x.@title = lstBookmarks.Text)
或者:
Dim theElement As XElement = (From i As XElement
In RootElement.<Bookmark>
Where i.@title = lstBookmarks.Text
Select i).First()
您也可以使用XPath查找XDocument
/ XElement
个对象中的节点。