使用XPath时标记无效
我正在使用XPath修改web应用程序,执行时会收到一条错误消息-无效令牌 这是我正在做的基本工作使用XPath时标记无效,xpath,Xpath,我正在使用XPath修改web应用程序,执行时会收到一条错误消息-无效令牌 这是我正在做的基本工作 public xmlNode GetSelection (SelectParams params, xmldocument docment) { xpathstring = string.format("Name =\'{0}' Displaytag = \'{1}' Manadatory=\'{2}', params.Name, params.Displaytag, params.M
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数据
发生的情况是,我在VisualStudio中收到一个XPathException错误,它显示无效令牌
我知道在xml文档中,我在标记中查找的参数有双引号,例如Name=“ABC”。所以,我认为这个问题可以用“\”来解决
有人能帮忙吗
根据评论更新
在Xml文档中,标记具有 设置为的属性 Name=“ABC”Displaytag=“ATag” Manadatory=“true”
作为参数传递给
SelectSingleNode()
(顺便说一句,精确的大写很重要)的字符串如下:
Name ='someName' Displaytag = 'someString' Manadatory='true'
这与语法合法的XPath表达式截然不同
错误消息只是反映了一个事实,即有毒食物已经被提供给XPath引擎
解决方案:请至少阅读一个简单的XPath教程,然后指定正确的XPath表达式。我想您需要:
//*[@Name="ABC"][@Displaytag="ATag"][@Manadatory="true"]
或
含义:整个文档中具有带有“ABC”值的
Name
属性、带有“ATag”值的Displaytag
属性和带有“true”值的Manadatory
属性的任何元素。正在构造的字符串不是有效的XPath表达式。事实上,它一点也不像XPath
事实上,即使它是一个有效的XPath表达式,通过字符串串联的方式构造它也是一种非常危险的做法,因为可能会发生注入攻击。但我怀疑这些建议会落得一塌糊涂。一位没有接受任何过去答案的人提出了一个糟糕的问题。1.如果您需要XPath表达式,您应该提供一个reduce输入示例。虽然我非常感谢您对selectsinglenode()的评论,但这是因为我正在键入它,并且在代码中它的大写字母正确!在Xml文档中,标记具有属性,这些属性设置为Name=“ABC”Displaytag=“ATag”Manadatory=“true”。所以,我不确定你在这里没有说什么?“问题出在哪里?”Andy5:好好读。。。R E A D。在字符串格式中,我需要如下构造它:string.format(“//*[@Name,{0}][@Displaytag,{1}][@Manadatory,{2}],params.Name,params.Displaytag,params.Manadatory);这行得通吗?@Andy5:为什么您缺少
=
比较运算符?我基于以下示例:。如果这是错误的,或者您有更好的方法,那么请告诉我您的意思?@Andy5:该问题中使用的attr,value
语法是调用包含(草垛,针)的一部分
XPath函数,而不是等式检查。出于好奇,您建议在从参数定义XPath时如何防止注入攻击?并非所有XPath API都允许这样做,但如果可能,请使用带有params://x[@key=$value]的XPath表达式,然后从调用环境中使用XPath.setParameter(value,'fried chicken')。
//*[@Name="ABC" and @Displaytag="ATag" and @Manadatory="true"]