如何使用Visual Basic从XML(text = value1)填充下拉列表?

时间:2013-04-04 13:58:24

标签: sql xml vb.net drop-down-menu

我有一个下拉列表,需要根据另一个下拉列表的选择加载特定值。我尝试使用DISTINCT设置从sql执行此操作,但这不会返回正确的值:

SELECT DISTINCT RMRP_Label, RMRP_Type FROM Table 
WHERE RMRP_Type IN (" + search + ")

由于某种原因,它不断更改DropDownList.SelectedItem.Text值... 所以我制作了一个XML文档:

<p>

 <param Name = "Intake_ID"
 Value = "!hssCombo"></param>  

 <param Name = "Office_ID"
 Value = "#hssCombo"></param>  

 <param Name = "sub_obj"
 Value = "%hssCombo"></param>  

 <param Name = "Svc_ID"
 Value = "!hssCombo"></param>

我需要的是,例如,我需要使用Name值填充下拉列表,其中Value = "#hssCombo"位于Value = search,而不是{{1}},如同在select语句中一样

1 个答案:

答案 0 :(得分:0)

您可以使用以下XPath选择值:

  

// P / PARAM [@Value = '#hssCombo'] / @名称

XPath是查询XML文档的标准方法,因此值得学习。大多数XML工具都支持XPath,包括.NET和XSLT。这是路径部分的含义:

  • //p - p是我们正在寻找的元素的名称。双斜杠表示元素可以出现在文档中的任何位置。如果我们只想包含发生在根的p元素,我们可以使用单个斜杠使其成为绝对路径。
  • /param - 指定p元素
  • 下的子元素
  • [@Value='#hssCombo'] - 指定条件。仅包含与条件匹配的//p/param个元素。在这种情况下,条件指定Value元素的param属性必须等于#hssCombo@符号表示Value是一个属性,而不是子元素名称。
  • /@Name - 指定我们对Name元素的param属性的值感兴趣。

如果您使用的是XmlDocument类,则可以使用SelectSingleNodeSelectNodes方法选择包含XPath的节点。例如:

Dim node As XmlNode = doc.SelectSingleNode("//p/param[@Value='#hssCombo']/@Name")
If node IsNot Nothing Then
    Dim name As String = node.InnerText
End If

显然,正如在您的SQL示例中,您可以动态构建XPath,因为它只是一个字符串,如下所示:

doc.SelectSingleNode("//p/param[@Value='" & search & "']/@Name")

如果您使用的是XDocument课程,则还可以使用XPathEvaluateXPathSelectElementXPathSelectElements方法选择XPath。