【问题标题】:How do you add attributes to an existing Root XML Node using TSQL?如何使用 TSQL 将属性添加到现有的根 XML 节点?
【发布时间】:2016-08-31 13:05:14
【问题描述】:

我在 TSQL 中构建了一些 XML。

declare @requestXML xml

set @requestXML = (
select @dataXML
for xml raw ('rtEvent') 

我现在拥有的一般输出遵循类似于这样的模式:

<rtEvent>
  <ctx>
    .....
  </ctx>
</rtEvent>

我现在想做的是向 rtEvent 根添加一些属性和值 元素节点,但我不确定如何实现它。

我查看了 XML 对象的 Modify 方法并观察了插入、替换值和删除操作,但似乎无法弄清楚如何使用它们中的任何一个来实现我想要的结果。

基本上,我希望能够修改根节点以反映如下内容:

<rtEvent type="customType" email="someaddress@domain.com"
  origin="eCommerce" wishedChannel="0" externalId="5515">
   <ctx>
     ...
   </ctx>
</rtEvent>

我应该使用记录在案的 XML.Modify 还是有更好的方法?应该怎么做?

【问题讨论】:

    标签: sql-server xml tsql


    【解决方案1】:

    以防万一你想看看修改方法的做法:

    DECLARE @requestXML XML = '<rtEvent><ctx>...</ctx></rtEvent>'
    SET @requestXML.modify(
        'insert 
        (
            attribute type {"customeType"},
            attribute email {"someaddress@domain.com"},
            attribute origin {"eCommerce"},
            attribute wishedChannel {"0"},
            attribute externalId {"5515"}
        )
        into (/rtEvent)[1]')
    SELECT @requestXML
    

    它返回这个:

    <rtEvent type="customeType" email="someaddress@domain.com" origin="eCommerce" wishedChannel="0" externalId="5515">
      <ctx>...</ctx>
    </rtEvent>
    

    【讨论】:

      【解决方案2】:

      最好使用FOR XML PATH,它允许您根据需要指定命名和别名:

      SELECT 'SomeContext' AS [ctx]
      FOR XML PATH('rtEvent')
      

      这将返回:

      <rtEvent>
        <ctx>SomeContext</ctx>
      </rtEvent>
      

      但是有了正确的属性,你会得到这个:

      SELECT  'customType' AS [@type]
             ,'someaddress@domain.com' AS [@email]
             ,'eCommerce' AS [@origin]
             ,0 AS [@wishedChannel]
             ,5515 AS [@externalId]
             ,'SomeContext' AS [ctx]
      FOR XML PATH('rtEvent')
      

      结果

      <rtEvent type="customType" email="someaddress@domain.com" origin="eCommerce" wishedChannel="0" externalId="5515">
        <ctx>SomeContext</ctx>
      </rtEvent>
      

      【讨论】:

        猜你喜欢
        • 2012-09-25
        • 2023-03-14
        • 2017-04-25
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        相关资源
        最近更新 更多