我正在处理一些xml列,并使用XQuery查找特定子(子E)的第一个最近的祖先(B),但是这个错误会发生:
MSG9335,级别16,状态1,第16行XQuery查询():不支持XQuery语法“祖先”。
祖先和后代的深度水平不是静态的,我希望结果是"B2“,我已经尝试过了。
DECLARE @x xml
SET @x = CAST(
'<A>
<B name="B1">
<C>
<B id="1" name="B2">
<D id="1.1" name="D1">
<E id="1" />
<E id="2" />
</D>
</B>
</C>
</B>
</A>' AS xml)
SELECT @x.query('data(//E/ancestor::B[1]/@name)')你能帮帮我吗?
发布于 2015-08-10 09:11:41
您可以尝试使用不同的方法来避免调用ancestor轴,例如:
SELECT @x.query('data(//B[.//E][not(.//B)]/@name)')关于正在使用的谓词的简要说明:
[.//E]:确保目标B元素具有子代元素E[not(.//B)]:确保目标B元素没有子代元素B,换句话说,目标B元素必须是具有子代E的最内部的B元素。发布于 2015-08-10 09:05:41
DECLARE @h int
DECLARE @x xml
SET @x = CAST(
'<A>
<B name="B1">
<C>
<B id="1" name="B2">
<D id="1.1" name="D1">
<E id="1" />
<E id="2" />
</D>
</B>
</C>
</B>
</A>' AS xml)
EXEC sp_xml_preparedocument @h OUTPUT, @x
SELECT eId, bName
FROM OPENXML(@h, '//E', 2)
WITH
(
eId varchar(5) '@id',
bName varchar(5) 'ancestor::B[1]/@name')
EXEC sp_xml_removedocument @hhttps://stackoverflow.com/questions/31915374
复制相似问题