xpath中怎样用变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xpath中怎样用变量相关的知识,希望对你有一定的参考价值。

参考技术A   在查询xml的时候,常常要知道某个元素的值或其属性值是否包含了某一值。如果采用把xml转换成字符串的做法势必造成系统性能的下降。

  jdom:提供了解释xml的途径;

  xpath:提供了查询xml的一种途径。大家或许对数据库的sql查询语句非常熟悉,xpath就有点类似于sql查询语句,只不过它是xml的查询语言。

contains:此函数在某种程度上有点类似sql的like关键字。

xpath中的变量

【中文标题】xpath中的变量【英文标题】:variable in xpath 【发布时间】:2011-12-19 04:06:59 【问题描述】:

我正在eXist 上写 xquery。

通常我用这种方式来选择xml中的项目:

fn:doc($document_name)/root/a

但现在我想从字符串变量中获取 xpath:

let $xpath := request:get-parameter("xpath", "")
fn:doc($document_name)/$xpath

当然不行。 我现在发现的唯一方法是使用eval

util:eval(fn:concat("fn:doc($document_name)", $xpath)):)

但我不想使用eval,因为它速度慢且不安全。

我知道有这样的:

fn:doc($document_name)/*[name()='node_name']

但我想通过整个路径选择项目,而不仅仅是节点的名称 我也尝试过使用node-xpath(),但不知道如何像name()一样使用它

【问题讨论】:

【参考方案1】:

您想做 eval() 函数所做的事情,因此任何解决方案都会遇到与 eval 相同的问题。您可以考虑的另一种方法是生成查询然后执行它,但它会遇到完全相同的问题。如果您认为将字符串限制为 XPath 表达式的子集可能更安全(例如,没有谓词或没有函数调用),那么您可以尝试使用简单的正则表达式测试这些条件。

【讨论】:

【参考方案2】:

尽管 Michael Kay 是对的,但 functx:dynamic-path() 可能会有所帮助。

它可能是介于 fn:eval 和动态生成查询之间的一个很好的中间解决方案。

希望对你有帮助

迈克尔

【讨论】:

我不确定这是否是个好主意,但至少eXist现在不支持这个功能。 @owen_water 您需要包含 functx 库。见:xqueryfunctions.com/xq/functx-1.0-doc-2007-01.xq

以上是关于xpath中怎样用变量的主要内容,如果未能解决你的问题,请参考以下文章

XPath怎样根据一个元素定位另外一个元素?

python中怎样在参数中加入变量

selenium怎样清除文本框中输入的内容

我怎样才能得到这个 Xpath

我怎样才能得到那个值? [复制]

怎样把其中的汉字提取出来呀,求Python大佬解答