我一直在尝试使用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") + "]")
我很感激协助代码。
非常感谢
答案 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