当前位置: 首页 > 面试题库 >

使用xml.modify将参数插入到xml列的特定元素中

田永春
2023-03-14
问题内容

我想使用存储过程将一些作为参数传入的值插入到列的xml中的元素中。到目前为止,我具有以下参数:

@profile_id int,
@user_id nvarchar(50),
@activity_name nvarchar(50),
@display_name nvarchar(50)

检索所需的xml:

DECLARE @profiles_xml xml
SET @profiles_xml = (SELECT profiles from tbl_applied_profiles WHERE profiles.value('(Profile/ID)[1]','int')= @profile_id)

@profiles_xml内的列中的xml看起来像这样:

<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
         <Name>activity1</Name>
      </Activity>
    </Activities>
  </User>
</Profile>

尝试将具有特定ID的活动名称和显示名称插入用户

SET @profiles_xml.modify('
    insert
    if(/Profile/User/ID=sql:variable("@user_id"))
    then Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
    else()
    as first
    into (/Profile/User/Activities)[1]')

我也尝试过此方法,但没有成功:

 SET @devices_xml.modify('
    insert /Profile/User[ID=sql:variable("@user_id")]/Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
    into (/Profile/User/Activities)[1]')

还有这个:

 SET @devices_xml.modify('
insert
 /Profile/User[ID=sql:variable("@user_id")]/Activities/Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
    into (/Profile/User/Activities)[1]')

正确的方法是什么?


问题答案:
declare @XML xml = '
<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
         <Name>activity1</Name>
      </Activity>
    </Activities>
  </User>
</Profile>'

declare @user_id nvarchar(50) = '20'
declare @activity_name nvarchar(50) = 'activity1'
declare @display_name nvarchar(50) = 'displayname1'

set @xml.modify('insert <DisplayName>{sql:variable("@display_name")}</DisplayName>
                 into (/Profile[ID = sql:variable("@user_id")]
                       /User/Activities/
                       Activity[Name = sql:variable("@activity_name")])[1]')

结果:

<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
        <Name>activity1</Name>
        <DisplayName>displayname1</DisplayName>
      </Activity>
    </Activities>
  </User>
</Profile>


 类似资料:
  • 如何将项目插入到特定索引的列表中?不使用: 帮助!

  • 问题内容: 假设我们有两个数组: 现在,我想在每个数组的第三个元素之后插入。我该怎么做? 问题答案: 可以用来提取数组的部分,联合数组运算符()可以重新组合部分。 这个例子: 给出:

  • 问题内容: 我有一个看起来像的xml列 我需要将XML中的数据插入到临时表中。 这里 为此,我使用以下代码。但是它不起作用,也没有在临时表中插入任何数据。 但这不起作用,如果正确的xml格式如下所示: 然后就可以了。 请帮我。 问题答案: 首先-请 使用适当的数据类型! 如果您的源数据是XML-为什么不使用数据类型? 另外,如果您的表中有一个-为什么不输入a或类型呢?而为什么是一个?? 没有意义.

  • 如何在Spring MVC中将输入元素绑定到数组列表元素? 视图模型: 模型属性: 控制器 然后,在jsp中,我有4个隐藏的输入,它们表示evaluatedId、evaluatorId、evoluatorName和evaluatedName的字段- 更新: 通过此更新,我收到以下错误:

  • 我无法使用python检索以下xml中的性别字段。我试过以下方法: 我希望得到元素。但我得到“没有” XML页面 有人能帮我理解我做错了什么吗?

  • 问题内容: 这是我的代码,也许您会立即注意到我所缺少的内容: 我正在尝试在CustomerId现有节点之前插入新的node()。这是我的XML示例文件: 这是一个抛出异常,我只是不知道还能尝试什么: NOT_FOUND_ERR:尝试在不存在的上下文中引用该节点。 问题答案: 在这里,我只是使用您提供的xml示例进行了测试的示例。 结果如下: 如果您有兴趣,这是我用来显示结果的示例代码: