VB.Net XElement:来自组合框循环通过XML的特定属性



我想要一个特定属性的值(例如,在我的html示例中title_1(,我在Visual Studio中使用组合框选择该属性。我在循环访问属性时遇到问题。它仅适用于title_1,并在title_1后停止。

跟随我的 html 文件

<div id="main">
	<div id="title_1">
		<p>product name</p>
	</div>
	<div id="title_2">
		<p>product highlights</p>
	</div>
	<div id="content">
		<p>product price - product size - product date</p>
	</div>
</div id="main">

因此,如果我在 ComboBox1 中title_2,我希望在我的文本框 1 中突出显示产品。如果我在 ComboBox1 中选择内容,我希望产品价格 - 产品大小 - 产品日期在我的文本框 1 中。到目前为止,它仅适用于title_1,在这里我在我的文本框中获得了产品名称1

这是我的代码

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xelement As XElement = XElement.Load("myPATHfile.html")
Dim attributes As IEnumerable(Of XElement) = xelement.Descendants("div")
For Each item As XElement In attributes
If attributes.@id = ComboBox1.Text Then
TextBox1.Text = attributes.Value
End If
Next
End Sub
End Class
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
End Sub

这可能只是一个错字。你在attributes中迭代每个item,但随后你不访问item,而是attributes

For Each item As XElement In attributes
If attributes.@id = ComboBox1.Text Then
TextBox1.Text = attributes.Value
End If
Next

将其更改为此

For Each item As XElement In attributes
If item.@id = ComboBox1.Text Then
TextBox1.Text = item.Value
End If
Next

固定。

此外,您的 html 在结束标记中包含属性。这有效吗?我必须删除它才能使代码正常工作。

</div id="main">

我会在匹配值之前添加此行以清除 TextBox1,以防不匹配

TextBox1.Clear()

您可能将属性加载到 ComboBox 中。但如果你不这样做,请使用这个。如果您将其包括在内,这将使问题更完整

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim xelement As XElement = XElement.Load("myPATHfile.html")
Dim attributes As IEnumerable(Of XElement) = xelement.Descendants("div")
ComboBox1.DataSource = attributes.Select(Function(a) a.@id).ToList()
End Sub

最新更新