2013-08-16 33 views
1

用下面的代碼我創建的XML節點:設置創建在SQL Server中的XML節點時,屬性的優先級

set @imageListXml = (
    select 
     'IMG' + CAST(m.entry_id AS VARCHAR) as '@id', 
     (select title from titles where entry_id=m.tid) as 'textelements/title', 
     'TEST' as 'references/reference/@body', 
     'IMG' + CAST(m.entry_id AS VARCHAR) as 'references/reference/@value' 

    from media m 

     ) 
    FOR XML PATH('image'), root('imagelist') 
    ) 

它創建類似的東西:

<imagelist> 
    <image id="IMG1111"> 
    <textelements> 
     <title>Test 1111</title> 
    </textelements> 
    <references> 
     <reference body="TEST" value="IMG1111" /> 
    </references> 
    </image> 
</imagelist> 

我怎樣才能把價值屬性第一,反之亦然?我認爲這取決於我在select語句中首先聲明的內容。我對麼?

+1

根據XML標準,元素中的屬性順序與XML無關。 – FrankPl

回答

0
set @imageListXml = (
    select 'IMG' + CAST(m.entry_id AS VARCHAR) as '@id', 
    (select title from titles where entry_id=m.tid) as 'textelements/title', 
    'IMG' + CAST(m.entry_id AS VARCHAR) as 'references/reference/@value', 
    'TEST' as 'references/reference/@body' 
    from media m 
    FOR XML PATH('image'), root('imagelist') 
) 

body屬性之前返回value屬性。但是,我不認爲這是在任何地方指定的,因爲XML元素內的屬性是無序的。它們總是按名稱引用,而不是按索引引用。也就是說,有些排序比其他排序更可讀/更漂亮,所以如果人類會注意生成的XML,確保更好的屬性排序是有意義的。