Ant*_*lev 5 xml sql-server t-sql
我们有一个奇怪的系统,我们正在与之集成,它使用 XML,但它不理解自闭合标签,所以
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE />
</BOOKING>
Run Code Online (Sandbox Code Playgroud)
超出了它的能力。
如果我拥有的是declare @x xml,我如何将其转换@x为字符串而没有自关闭标签:
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE></PERSONCODE>
</BOOKING>
Run Code Online (Sandbox Code Playgroud)
解决方法是使用插入 (XML DML)将不太可能的值添加到空节点,然后替换字符串表示形式上的值。
declare @S nvarchar(max)
declare @XML xml = '
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE />
</BOOKING>'
-- Add _ as value to all empty nodes
while @XML.exist('//*[.="" and count(*)=0]') = 1
set @XML.modify('insert text{"_"} into (//*[.="" and count(*)= 0])[1]')
-- Cast to string and remove _ as value
set @S = replace(cast(@XML as nvarchar(max)), '>_<', '><')
select @S
Run Code Online (Sandbox Code Playgroud)