【问题标题】:TSQL Split XML attributesTSQL 拆分 XML 属性
【发布时间】:2012-11-19 03:31:05
【问题描述】:

我有一个 xml 字符串,需要在 sql 中对其进行操作。

<RuleData ReturnVariable="">
  <MateProperties>
    <Property Key="value" DisplayName="name value" />
    <Property Key="value2" DisplayName="name value2" />
  </MateProperties>
  <ReferenceNames>
    <Item Name="0" Value="=CouplerType + &quot;-1&quot;" />
    <Item Name="1" Value="Driveshaft-1" />
  </ReferenceNames>
  <ReferenceFeatures>
    *<Item Name="=CouplerType + &quot;-1&quot;" Value="CSYS_BOREB" />
    <Item Name="Driveshaft-1" Value="CSYS_CouplerINSIDE" />*
  </ReferenceFeatures>
</RuleData>

这两行我需要转换一下。

<Item Name="=CouplerType + &quot;-1&quot;" Value="CSYS_BOREB" />
<Item Name="Driveshaft-1" Value="CSYS_CouplerINSIDE" />

到这种新格式。

<Value>
  <Column Value="=CouplerType + &quot;" />
  <Column Value="CSYS_BOREB" />
</Value>
<Value>
  <Column Value="Driveshaft-1" />
  <Column Value="CSYS_CouplerINSIDE" />
</Value>

基本上每一行都必须分成两部分并重新命名。我可以处理重命名我只是在拆分列时遇到了麻烦。我也必须在 ReferenceNames 部分做同样的事情。那个更容易,因为它总是“0”和“1”,所以我可以简单地将xml转换为字符串并找到替换它。不过,ReferenceFeatures 部分更复杂,因为名称部分中可以包含任何内容。

【问题讨论】:

    标签: xml tsql


    【解决方案1】:
    declare @xml xml =
        N'<RuleData>
            <ReferenceFeatures>
                <Item Name="=CouplerType + &quot;-1&quot;" Value="CSYS_BOREB" />
                <Item Name="Driveshaft-1" Value="CSYS_CouplerINSIDE" />
            </ReferenceFeatures>
        </RuleData>'
    
    ;with items as
    (
        select
            row_number() over (order by (select 1)) as RowNumber
            ,t.n.value('@Name', 'nvarchar(255)') as Name
            ,t.n.value('@Value', 'nvarchar(255)') as Value
        from @xml.nodes('//RuleData/ReferenceFeatures/Item') as t(n)
    )
    select
        (select it.Name as [@Value] for xml path ('Column'), type),
        (select it.Value as [@Value] for xml path ('Column'), type)
    from items it
    order by it.RowNumber
    for xml raw ('Value'), type
    

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多