【发布时间】:2018-08-20 09:11:37
【问题描述】:
我有一个如下所示的 XML。到目前为止,如果 A 和 B 节点都在 XML 中,我可以轻松地映射它们的属性,即 type="A-type" 和 type="B-type"。
我遇到了<B> 节点可能不存在于 XML 中的情况,然后我也需要获取 <A> 节点属性,即type="A-type",但当前逻辑没有返回任何行。请帮助如何实现这一目标。
请注意<B> 可以在<A> 下出现任意次数,这就是我们必须使用路径Root/A/B 的原因。由于无法预测 <B> 的出现,我无法更改路径。
示例 1(存在<B>):
DECLARE @myXML XML =
'<Root>
<A type="A-type">
<B type="B-type"></B>
</A>
</Root>'
SELECT
N.value('(../@type)[1]','VARCHAR(100)'),
N.value('(@type)[1]','VARCHAR(100)')
FROM @myXML.nodes('Root/A/B') AS X(N)
示例 2(<B> 不存在):
DECLARE @myXML XML =
'<Root>
<A type="A-type">
</A>
</Root>'
SELECT
N.value('(../@type)[1]','VARCHAR(100)'),
N.value('(@type)[1]','VARCHAR(100)')
FROM @myXML.nodes('Root/A/B') AS X(N)
预期输出:
【问题讨论】:
标签: sql sql-server xml tsql