0

我有想要粉碎的 XML。我正在尝试 CROSS APPLY 并且只采用 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) 
4

1 回答 1

1

您可以使用 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) 
于 2015-11-16T10:57:36.267 回答