将CROSS APPLY限制为特定xsi:type



我有想要分解的XML。我正在尝试交叉应用,只使用xsi:type ReferenceNode的QueryNode,但我不知道如何将.nodes限制为仅使用xsi:type。这是我的XML

<QueryNode xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TableNode">
<ChildNodes>
<QueryNode xsi:type="ReferenceNode">
</QueryNode>
</ChildNodes>
</QueryNode>

到目前为止,我的问题是:

SELECT      acode, x.l.value('.', 'VARCHAR(255)')
FROM        @originals as o
CROSS APPLY o.definition_xml.nodes('QueryNode/ChildNodes/QueryNode/@xsi:type') as x(l) 

您可以使用XPath谓词([.....])来筛选具有特定条件的目标元素,例如:

QueryNode/ChildNodes/QueryNode/@xsi:type[.="ReferenceNode"]

所以整个查询看起来是这样的:

SELECT      acode, x.l.value('.', 'VARCHAR(255)')
FROM        @originals as o
CROSS APPLY o.definition_xml.nodes('QueryNode/ChildNodes/QueryNode/@xsi:type[.="ReferenceNode"]') as x(l) 

相关内容

  • 没有找到相关文章

最新更新