我正在使用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 = “真”。
答案 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表达式,通过字符串连接以这种方式构造它也是一种非常危险的做法,因为注入攻击的可能性很大。但我怀疑这些建议会落在石头上。