解析xml时如何使用“交叉应用”?

问题描述 投票:0回答:1

尝试解析多个 xml 文件。 但是在应用交叉应用时堆栈

第一个变体工作正常

DECLARE @input XML = 

'<a>
    <b>
     <g>one</g>
    <n>
        <c>somedata1 1</c>
    </n>
    <n>
        <c>2somedata 2</c>
    </n>
</b>
</a>'       

SELECT
g                   = XC.value('(g)[1]', 'varchar(100)'),
i                   = xc1.n1.value ('(c)[1]', 'varchar(100)')
FROM @input.nodes ('a/b') as XT (XC)
cross apply @input.nodes ('//n') as xc1(n1)

第二个变体失败(返回空字段)-我知道这是因为缺少 <с> 节点

DECLARE @input XML = 
'<a>
    <b>
     <g>one</g>
        </b>
</a>'
SELECT
    g                   = XC.value('(g)[1]', 'varchar(100)'),
    i                   = xc1.n1.value ('(c)[1]', 'varchar(100)')
FROM @input.nodes ('a/b') as XT (XC)
cross apply @input.nodes ('//n') as xc1(n1)

我处理多个文件,其中一些有这些节点,有些没有,我的决定应该是什么?

sql sql-server xml tsql
1个回答
3
投票

在第二种情况下,你没有任何

n
元素。你需要使用
© www.soinside.com 2019 - 2024. All rights reserved.