使用XPath时无效的令牌

时间:2011-02-10 20:31:50

标签: xpath

我正在使用XPath对Web应用程序进行修改,并在执行时收到错误消息 - 令牌无效!

这是我正在做的基本事情

public xmlNode GetSelection (SelectParams params, xmldocument docment)

{

    xpathstring = string.format("Name =\'{0}' Displaytag = \'{1}' Manadatory=\'{2}', params.Name, params.Displaytag, params.Manadatory);

    return document.selectsinglenode(xpathstring);

}

正如您所看到的,我正在为我的xml文档找到的节点上创建一个字符串并设置值,从而返回与我的参数匹配的xml数据。

发生的事情是我在Visual Studio中遇到xpathexeception错误,并且它表示无效令牌。

我知道在xml文档中我在标签中查看的参数有双引号,例如,Name =“ABC”。所以,我认为问题可以通过“\”来解决。

有人可以帮忙吗?

从评论中更新

  

在Xml文档中,标签具有   它们被设置为的属性   名称=“ABC”Displaytag =“ATag”   Manadatory = “真”。

3 个答案:

答案 0 :(得分:0)

作为参数传递给SelectSingleNode()的字符串(BTW,确切的大写 重要)类似于:

Name ='someName' Displaytag = 'someString' Manadatory='true'

与语法上合法的XPath表达式完全不同

错误信息恰好反映了XPath引擎已经有毒食物的事实。

解决方案:至少阅读一篇轻量级XPath教程,然后指定正确的XPath表达式。

答案 1 :(得分:0)

我想你需要:

//*[@Name="ABC"][@Displaytag="ATag"][@Manadatory="true"]

或者

//*[@Name="ABC" and @Displaytag="ATag" and @Manadatory="true"]

含义整个文档中的任何元素,其Name属性为“ABC”值,Displaytag属性为“ATag”值,且为{ {1}}属性为“true”值。

答案 2 :(得分:0)

您构建的字符串不是有效的XPath表达式。事实上,它完全不像XPath。

实际上,即使它是一个有效的XPath表达式,通过字符串连接以这种方式构造它也是一种非常危险的做法,因为注入攻击的可能性很大。但我怀疑这些建议会落在石头上。