0

我一直在尝试使用 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") + "]")

我将不胜感激有关代码的帮助。

非常感谢

4

2 回答 2

0

假设它的ITEM属性是唯一的,并且item也可以在查询字符串中id使用,你可以使用这个字符串来构造一个 XPath 来选择一个特定的PRODUCT元素:

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

如果 aPRODUCTITEM与 a 唯一CATEGORY,则使用此字符串构造 XPath:

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

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

更新以下评论:

啊,好的,通过其属性获取给定的name属性值:CATEGORYid

"//CATEGORY[@id=" + Request.QueryString.Get("id") + "]/@name"
于 2013-11-04T11:26:35.077 回答
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
于 2013-11-04T21:00:19.363 回答