【问题标题】:Select tagName and tagValue from Xml从 Xml 中选择 tagName 和 tagValue
【发布时间】:2021-11-26 15:52:26
【问题描述】:

使用 Sql Server 2008 中的查询,我想从 xml 中提取 tagNametagValue,但我只能检索 tagValue。 我想动态提取它们,因为标记名可能会改变

感谢任何帮助

这是代码:

DECLARE @test AS XML='
<properties>
  <property key="FirstProp">Blah</property>
  <property key="SecondProp">Blah2</property>
  <property key="ThirdProp">Blah3</property>
  <property key="Other">80000011b</property>
  <property key="Another">TheEnd</property>
  <property key="MoreDIfficult">
    <structure type="">
      <property key="Id">10100</property>
      <property key="Name">TestName</property>
    </structure>
  </property>
</properties>
';

SELECT
    PROPERTY.N.value('local-name(.)', 'varchar(max)') AS TagName
    ,PROPERTY.N.value('.', 'nvarchar(100)') AS TagValue
FROM
(SELECT CAST(@test AS XML) Prop  ) XML
OUTER APPLY XML.Prop.nodes('/properties/*') AS PROPERTY(N);

【问题讨论】:

  • “标签名称”是什么意思?这似乎工作正常,并在TagName 列中返回'property'
  • 旁注:SQL Server 2008 已完全不支持大约 2.5 年。 强烈建议您升级到受支持的版本。您不这样做的时间越长,就越难获得支持的版本。
  • 请编辑您的问题并添加所需的输出

标签: xml sql-server-2008


【解决方案1】:

请尝试以下解决方案。

它将检索具有叶子节点的任何 XML 元素作为文本。

SQL

DECLARE @test AS XML=
N'<properties>
  <property key="FirstProp">Blah</property>
  <property key="SecondProp">Blah2</property>
  <property key="ThirdProp">Blah3</property>
  <property key="Other">80000011b</property>
  <property key="Another">TheEnd</property>
  <property key="MoreDIfficult">
    <structure type="">
      <property key="Id">10100</property>
      <property key="Name">TestName</property>
    </structure>
  </property>
</properties>';

SELECT N.value('local-name(.)', 'varchar(max)') AS TagName
    ,  N.value('@*[1]', 'varchar(max)') AS Attr
    , N.value('text()[1]', 'nvarchar(100)') AS TagValue
FROM
(SELECT CAST(@test AS XML) Prop  ) XML
OUTER APPLY XML.Prop.nodes('/properties//*[text()]') AS PROPERTY(N);

输出

+----------+------------+-----------+
| TagName  |   Attr     | TagValue  |
+----------+------------+-----------+
| property | FirstProp  | Blah      |
| property | SecondProp | Blah2     |
| property | ThirdProp  | Blah3     |
| property | Other      | 80000011b |
| property | Another    | TheEnd    |
| property | Id         | 10100     |
| property | Name       | TestName  |
+----------+------------+-----------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多