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中怎样用变量的主要内容,如果未能解决你的问题,请参考以下文章