XQuery - 仅获取查询值

时间:2018-06-07 13:54:28

标签: xml xquery where

我在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

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

我如何获得渴望的结果?

非常感谢

1 个答案:

答案 0 :(得分:0)

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

相反,您希望迭代文档中所有属性的序列,测试这些属性是否包含SQL语句,然后返回匹配属性附加到的元素。

您可以将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使用后代轴//使用元素选择器*选择所有元素,然后谓词过滤器通过选择全部来判断任何元素的属性是否与SQL正则表达式匹配使用@*的属性,然后使用它自己的谓词过滤器测试每个属性。如果谓词选择至少一个项目,则它们将评估为true,并且选择正在测试的节点。