Xpath和MoveToAttribute

时间:2013-11-04 11:18:05

标签: vb.net xpath xpathnavigator

我一直在尝试使用Xpath(在VB.net中)执行以下操作:

首先使用在查询字符串中传递给网页的“ID”属性检查每个CATEGORY节点,然后找到将“NAME”属性分配给字符串变量。我一直在试图使用MoveToFirstAttribute(),这是无效的。

以下是XML示例:

<?xml version="1.0" ?>
<STOREITEMS>
<CATEGORY id='123' name='Products'>
<PRODUCT ITEM='456'>
</PRODUCT>
</CATEGORY>
<CATEGORY id='321' name='More Products'>
<PRODUCT ITEM='789'>
</PRODUCT>
</CATEGORY>
</STOREITEMS>

我在另一个页面的其他位置使用了以下表达式来选择特定类别,以便我可以处理PRODUCT子节点,但是我无法选择特定的CATEGORY节点,然后移动到其NAME属性:

iter = nav.Select("//CATEGORY[@id=" + Request.QueryString.Get("id") + "]")

我很感激协助代码。

非常感谢

2 个答案:

答案 0 :(得分:0)

假设其ITEM属性是唯一的,item在查询字符串中也可用于id,您可以使用此字符串构建XPath到选择特定的PRODUCT元素:

"//PRODUCT[@ITEM=" + Request.QueryString.Get("item") + "]"

如果PRODUCT的{​​{1}}仅与ITEM唯一,则使用此字符串构建XPath:

CATEGORY

如果上述任何假设不正确,请在下方发表评论,我们将进行调整。

以下评论更新:

啊,好的,获取"//CATEGORY[@id=" + Request.QueryString.Get("id") + "]" + "/PRODUCT[@ITEM=" + Request.QueryString.Get("item") + "]" 属性给出的name的{​​{1}}属性值:

CATEGORY

答案 1 :(得分:0)

感谢kjhughes,但以下代码只是将产品节点的全部内容分配给st变量:

Dim doc As XPathDocument
Dim nav As XPathNavigator
Dim iter As XPathNodeIterator
Dim count As Integer = 0
Dim st As String

doc = New XPathDocument(AppSettings.Item("SECURED_ASSETS_PATH") & "App_Data/products.xml")
nav = doc.CreateNavigator
iter = nav.Select("//CATEGORY[@id=" + Request.QueryString.Get("id") + "]/@name")
st = iter.Current.Value