我在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
但它并没有给我任何结果:(
我如何获得渴望的结果?
非常感谢
答案 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,并且选择正在测试的节点。