XPath查询帮助语法

时间:2011-05-04 18:23:30

标签: asp.net vb.net xpath

我对xPath表达式有些困难。

上下文:我使用XML文档在ASP应用程序中存储查询/存储过程名称。我使用实用程序函数来加载xmldocument(如果它以前没有加载),我试图从文档中选择与Id元素匹配的节点集。这是我的Xml文档:

<Queries>
  <Id>USER001
    <Sql>spUsers_GetUserByUserName</Sql>
  </Id >
  <Id <USER002
    <Sql>spUsers_GetUserByEmail</Sql>
</Queries>

这是代码(我正在使用VB.NET)

Module Utility

private sqlXml as xmldocument

'....other stuff.....


Public Function GetSql(queryId as string) as string

dim qry as string
dim node as XmlNode

if sqlXml is nothing then
   sqlXml = new xmldocument
   sqlXml.Load (..path)
end if 

qry = "//Id['" & queryId  & "']"    'xPath to select the Id node = to paramter passed

node = sqlxml.SelectSingleNode(qry) 'set node <Id><Sql></Sql></Id>

return node.SelectSingleNode("//Sql").InnerText 'Return the Sql element value from the Id

End Function

问题:

节点变量只返回第一个元素。我已经验证了用于qry的{​​{1}}字符串是正确的Id值(即USER002) - 但是节点正在加载USER001元素。很显然,xPath表达式搞砸了。我需要对xPath表达式进行调整,以便返回正确的SelectSingleNode元素和相应的子<Id>元素。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

Google XML COOKTOP并安装它。这是一个很棒的小软件应用程序,用于在XML数据文件上尝试XPATH和XSLT表达式并查看结果。

答案 1 :(得分:0)

看起来你正在尝试构建像//Id['USER002']这样的表达式。这将选择有效布尔值'USER002'为真的所有E元素 - 这些都是它们。目前还不清楚你的意图,因为你的XML样本很乱,但它应该像//Id[@id='USER002']

另外,你真的不应该通过字符串连接来构造XPath表达式。当有人提供包含引号的字符串时,它会使您容易发生注射攻击和意外故障。它效率也很低。构造包含变量引用$ param的字符串,并从API设置参数。 (我不知道怎么在VB中这样做。)