XQuery - 仅获取查询值

XQuery - Get only the Query Value

我是 XQUERY 的新手...

我有一个来自 XML 文件的元素,如下所示:

 <element field="SQL" name="QUERY" value="INSERT INTO tableB SELECT * FROM tableA;"/>

我正在使用 XQuery 来获取具有 INSERT INTO 的查询。所以从我的 XML 文件中我必须收到这个:

SELECT * FROM tableA

我正在尝试使用此代码来获取:

for $x in doc("C:\XXXXX.item")
where matches($x, "INSERT INTO$") = true()
return $x/element

但它没有给我任何结果:(

怎样才能得到想要的结果?

非常感谢

在您当前的代码中,您的 $x 是一个文档的序列,并且您的 WHERE 子句正在评估该文档的计算文本值(不包括属性值)是否与正则表达式模式匹配。

相反,您可能希望遍历文档中所有属性的序列,测试这些属性是否包含 SQL 语句,然后 return 匹配属性( s) 附于.

您可以将 XQuery FLWOR 调整为:

for $x in doc("C:\XXXXX.item")//@*
where matches($x, "INSERT INTO.*"))
return $x/..

或者只写成带有谓词的 XPath:

doc("C:\XXXXX.item")//*[@*[ matches(., "INSERT INTO.*")]]

XPath 使用后代轴 // 到 select 所有使用元素 select 或 * 的元素,然后谓词过滤器评估元素的任何属性通过 selecting 所有属性与 @* 匹配 SQL 正则表达式,然后用它自己的谓词过滤器测试每个属性。如果谓词 select 至少一项,则它们的计算结果为真,并且被测试的节点是 selected.