【问题标题】:Modify a portion of an XML with key/value structure使用键/值结构修改 XML 的一部分
【发布时间】:2023-03-28 23:12:01
【问题描述】:

我需要编写一个 SQL Server 查询来更改以下示例 XML 的值,每个都应该有不同的新值:

例子:

来自

<Item>
      <key>RabbitMQConnection</key>
      <value Tr="PropertyBag">
        <Item>
          <key>Encoding</key>
          <value>65001</value>
        </Item>
        <Item>
          <key>HostName</key>
          <value>TESTHOST</value>
        </Item>
        <Item>
          <key>UserName</key>
          <value>USER</value>
        </Item>
        <Item>
          <key>Password</key>
          <value>PASS</value>
        </Item>
        <Item>
          <key>QueueName</key>
          <value>TESTQUEUE</value>
        </Item>
        <Item>
          <key>VirtualHost</key>
          <value>TESTVHOST</value>
        </Item>
      </value>
    </Item>
    <Item>

<Item>
          <key>RabbitMQConnection</key>
          <value Tr="PropertyBag">
            <Item>
              <key>Encoding</key>
              <value>65001</value>
            </Item>
            <Item>
              <key>HostName</key>
              <value>TESTHOST22</value>
            </Item>
            <Item>
              <key>UserName</key>
              <value>USER222</value>
            </Item>
            <Item>
              <key>Password</key>
              <value>PASS22</value>
            </Item>
            <Item>
              <key>QueueName</key>
              <value>TESTQUEUE22</value>
            </Item>
            <Item>
              <key>VirtualHost</key>
              <value>TESTVHOST22</value>
            </Item>
          </value>
        </Item>
        <Item>

我在xpath 语言方面真的很吃力,请问我可以寻求帮助吗?

非常感谢!

【问题讨论】:

  • 请告诉我们你尝试了什么。
  • XML 格式不正确。此外,还不清楚 XML 的位置。它是一个变量,它是一个数据库表中的列。
  • 在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)

标签: sql-server xml tsql xpath xquery


【解决方案1】:

请尝试以下方法。

您可以使用相同的方法一一修改其余的 XML 元素。

SQL

DECLARE @xml XML =
N'<Item>
    <key>RabbitMQConnection</key>
    <value Tr="PropertyBag">
        <Item>
            <key>Encoding</key>
            <value>65001</value>
        </Item>
        <Item>
            <key>HostName</key>
            <value>TESTHOST</value>
        </Item>
        <Item>
            <key>UserName</key>
            <value>USER</value>
        </Item>
        <Item>
            <key>Password</key>
            <value>PASS</value>
        </Item>
        <Item>
            <key>QueueName</key>
            <value>TESTQUEUE</value>
        </Item>
        <Item>
            <key>VirtualHost</key>
            <value>TESTVHOST</value>
        </Item>
    </value>
</Item>';

DECLARE @HostName NVARCHAR(30) = 'NewTESTHOST';

SET @xml.modify('replace value of (/Item/value/Item[key="HostName"]/value/text())[1]
   with (sql:variable("@HostName"))' );

-- test
SELECT @xml;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2015-05-22
    • 2018-02-27
    • 2016-01-14
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多