首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止XML-DML修改函数向插入节点添加空名称空间

如何防止XML-DML修改函数向插入节点添加空名称空间
EN

Stack Overflow用户
提问于 2013-10-29 15:29:20
回答 1查看 892关注 0票数 5

因此,基本上,我有一个脚本,它根据是否存在这样的节点来更新XML。这是

代码语言:javascript
复制
DECLARE @newJob XML
SET @newJob = N'<job>
    <job-detail>
      <name>job-name</name>
    </job-detail>
  </job>'

;WITH XMLNAMESPACES(DEFAULT 'http://quartznet.sourceforge.net/JobSchedulingData')
UPDATE XmlTable
SET ConfigXml.modify('
insert sql:variable("@newJob") 
as last into (/quartz)[1]')
WHERE ConfigXml.exist(N'//quartz/job/job-detail/name[.="job-name"]') = 0

现在,除了插入的节点现在包含空的名称空间外,一切都按预期工作,如下所示

代码语言:javascript
复制
<job xmlns="">

如果我移除

代码语言:javascript
复制
;WITH XMLNAMESPACES(DEFAULT 'http://quartznet.sourceforge.net/JobSchedulingData')

查询停止执行。我认为这是因为我的根节点定义了名称空间。

代码语言:javascript
复制
<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" overwrite-existing-jobs="true">

因此,我的问题是-是否有任何方法来防止这个命名空间添加到正在插入的节点中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 13:38:30

为了克服这个问题,我稍微改变了方法,特别是在xml修改函数本身中声明xml名称空间,并在插入节点中添加名称空间前缀。那就成功了

代码语言:javascript
复制
UPDATE XmlTable
SET ConfigXml.modify('
declare namespace ns="http://quartznet.sourceforge.net/JobSchedulingData";
insert <ns:job>
    <ns:job-detail>
      <ns:name>jobName</ns:name>
    </ns:job-detail>
  </ns:job>
as last into (/ns:quartz)[1]')
WHERE ConfigXml.exist(N'
declare namespace ns="http://quartznet.sourceforge.net/JobSchedulingData";
//ns:quartz/ns:job/ns:job-detail/ns:name[.="jobName"]') = 0

希望这能帮到别人。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19662548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档