Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XPath时标记无效_Xpath - Fatal编程技术网

使用XPath时标记无效

使用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

我正在使用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数据

发生的情况是,我在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"]