統合している奇妙なシステムがあり、XMLを消費しますが、それはしない自己終了タグを理解するため、
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE />
</BOOKING>
その能力を超えています。
私が持っているのがdeclare @x xml
、どのように変換するのですか@x
to string without自己終了タグがあります:
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE></PERSONCODE>
</BOOKING>
回避策は insert(XML DML) を使用して空のノードにありそうもない値を追加し、次に replace 文字列表現の値を使用することです。
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