【问题标题】:Set the priority of attributes when creating XML nodes in SQL Server在 SQL Server 中创建 XML 节点时设置属性的优先级
【发布时间】:2013-08-16 15:21:05
【问题描述】:

使用以下代码创建 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 语句中首先陈述的内容。我说的对吗?

【问题讨论】:

  • 根据 XML 标准,元素内的属性顺序与 XML 无关。

标签: sql sql-server xml


【解决方案1】:
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,那么确保更好的属性排序是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多