XML modify方法

来源:互联网 发布:站外淘宝精选怎么加入 编辑:程序博客网 时间:2024/06/05 09:47

  sqlserver2008 XML中讲关于操作文档的问题,包括modify,query,notes。
modify 主要包括insert,delete,replace value of 三种。
  insert;增加元素时,set @targetxml.modify('insert <element ....>its value</element> {as firt|as last|after|before}
into (/root/../target)[1]
').注意一点:各种路径表达式都指定“[1]”以要求每次只返回单个目标。这样就确保了只有单个目标节点。[1]不可以省去。{as firt|as last|after|before}是指定插入的位置顺序,如果XML文档里面本来没有元素,那么as first 不需要写。
  如果是想一次性多插入几个元素,那么有2中方法可以选择。
 1:insert(<element1></element1>,<element2></element2>..) into...
 2: 利用变量代替多个元素。
   set @doc='<element1></element1>,<element2></element2>..'
   insert sql:variable("@doc") into ..即可
  insert 插入属性时,set @targetxml.modify('insert attribute name{"value"} {
as last|as first|after|before} into (/root/../@)[1]')
   当然还可以插入文本,注释,执行语句,形式如同插入元素

  delete 删除元素时:set @targetxml.modify('delete /root/../name[1]')
  delete 删除属性时:set @targetxml.modify('delete /root/../@name')
  delete 删除文本时:set @targetxml.modify('delete /root/../text()')
  在文档中必须保持对现有节点的引用。 不能是构造的节点。 表达式不能是根 (/) 节点。 如果表达式返回空序列,则不进行删除,不返回错误。

  replace value of
      Expression1
with
      Expression2
  Expression1 和Expression2必须是相同类型的单个节点,如果是多个节点则会出错。Expression1 必须返回具有简单类型内容(列表或原子类型)的单个元素、文本节点或属性节点。Expression1 不可能是联合类型、复杂类型、处理指令、文档节点或注释节点。 如果它是,则会返回错误。

SET @myDoc.modify('
  replace value of (/Root/Location/step[1]/text())[1]
  with     "new text describing the manu step"
')
SELECT @myDoc
-- update attribute value
SET @myDoc.modify('
  replace value of (/Root/Location/@LaborHours)[1]
  with     "100.0"
请注意,更新的目标必须最多是一个通过在表达式的结尾添加“[1]”在路径表达式中显式指定的节点。

原创粉丝点击