0
有點卡在這一個。我有一個名稱/值列的表:FOR XSINIL使用動態節點名稱
NameValue table
-----------------------------------------------------------
Name varchar(100) Value varchar(100)
-----------------------------------------------------------
FirstName First value
SecondName Second value
ThirdName Null or Empty String
etc...
我試圖讓我的結果看起來像下面的XML,但我不能完全到達那裏。
<MyValues xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FirstName>First value</FirstName>
<SecondName>Second value</SecondName>
<ThirdName xsi:nil="true" />
</MyValues>
要獲得動態名稱的工作,我Concat的XML並鑄成XML像這樣:
select cast('<' + name + '>' + value + '</' + name + '>' as xml)
from NameValue
for xml raw(''), root('MyValues'), elements xsinil
上面的查詢生成這個XML沒有xsi:nil="true"
<MyValues xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FirstName>First value</FirstName>
<SecondName>Second value</SecondName>
<ThirdName />
</MyValues>
如果我不作爲XML格式化後,我剩下以下內容:
<MyValues xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FirstName>First value</FirstName><
etc...
我嘗試在連接中添加xsi:nil="true"
,但收到有關缺少名稱空間的錯誤。我猜,使這項工作,我將不得不在同一個命名空間添加到包含null或空字符串每一行,所以結果看起來就會像下面這樣:
<MyValues>
<FirstName>First value</FirstName>
<SecondName>Second value</SecondName>
<ThirdName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
</MyValues>
有可能是在結果集中有幾百個這樣的空字符串,所以我寧願將該名稱空間放在根級別以節省帶寬。這是可能嗎?