[英]TSQL for xml add schema attribute to root node
我的情況是這樣的(簡化):
DECLARE @period XML = (
SELECT
'2012' 'period'
FOR XML PATH(''), ROOT ('survey'))
DECLARE @persons XML = (
SELECT
Person.Name 'users/person'
FROM Person
FOR XML PATH(''), ROOT ('company'))
SET @persons.modify('insert sql:variable("@period") as first into (/company)[1]')
SELECT @persons
這給了我一個像這樣的XML:
<company>
<survey>
<period>2012</period>
</survey>
<users>
<person>Dubach</person>
</users>
<users>
<person>Pletscher</person>
</users>
...
現在我需要將XML模式添加到根節點,如下所示:
<company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mydomain.com/xmlns/bla/blabla/myschema.xsd" xmlns="http://www.mydomain.com/xmlns/bla/blabla">
<survey>
<period>2012</period>
</survey>
<users>
<person>Dubach</person>
</users>
<users>
<person>Pletscher</person>
</users>
...
微軟說我必須在SELECT語句之前使用WITH XMLNAMESPACES ,但這在我的情況下不起作用。
如何添加這些xmlnamespaces?
從select中拆分聲明,然后按照描述使用with xmlnamespaces
。
DECLARE @persons XML
;with xmlnamespaces (
'http://www.mydomain.com/xmlns/bla/blabla' as ns,
'http://www.w3.org/2001/XMLSchema-instance' as xsi
)
select @persons = (
select
Person.Name as 'ns:users/person'
FROM Person
FOR XML PATH(''), ROOT ('company')
)
set @persons.modify('insert ( attribute xsi:schemaLocation {"http://www.mydomain.com/xmlns/bla/blabla/myschema.xsd"}) into (/company)[1]')
我在這里找到了添加所有命名空間的解決方案:
https://stackoverflow.com/a/536781/1306012
顯然它不是非常“漂亮”的風格,但在我的情況下,它的工作原理,我還沒有找到另一個有效的解決方案。
解
DECLARE @period XML = (
SELECT
'2012' 'period'
FOR XML PATH(''), ROOT ('survey'))
DECLARE @persons XML = (
SELECT
Person.Name 'users/person'
FROM Person
FOR XML PATH(''), ROOT ('company'))
SET @persons.modify('insert sql:variable("@period") as first into (/company)[1]')
-- SOLUTION
SET @persons = replace(cast(@persons as varchar(max)), '<company>', '<company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mydomain.com/xmlns/bla/blabla/myschema.xsd" xmlns="">')
SELECT @persons
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.