0

我想从存储在数据库中键入的 xml 列中的菜单 xml 中删除一些节点。
来自菜单 xml 的片段 -

<menu xmlns="http://xxx" ..>
<menuItem name="Menu1">
    <menuItem name="SubMenu1">
        <role>role1</role>
        <url target="webPage1.aspx" />
    </menuItem> 
</menuItem> 

我正在尝试<role>使用menuItem = "SubMenu1"以下 XML DML 删除 -

UPDATE [dbo].[MenuTest]
SET xmlMenu.modify('
    declare namespace ns="http://xxx";
    delete(/ns:menu/ns:menuItem[@name="Menu1"]/ns:menuItem[@name="SubMenu1"]/ns:role[1])
')

但收到此错误:

消息 6965,级别 16,状态 1,第 1 行
XML 验证:内容无效。预期元素:http://xxx:role,其中指定了元素“http://xxx:url”。

可以请指导我在这里缺少什么。

谢谢!

4

1 回答 1

1

看起来您的 XML 列已连接到需要在<role>节点之前有一个节点的 XML 模式<url>

您在此处发布的内容效果很好。

declare @T table 
(
  xmlMenu xml
)

insert into @T values
('<menu xmlns="http://xxx">
     <menuItem name="Menu1">
       <menuItem name="SubMenu1">
         <role>role1</role>
         <url target="webPage1.aspx" />
       </menuItem> 
    </menuItem>
  </menu>')


UPDATE @T
SET xmlMenu.modify('
    declare namespace ns="http://xxx";
    delete(/ns:menu/ns:menuItem[@name="Menu1"]/ns:menuItem[@name="SubMenu1"]/ns:role[1])
')

结果

<menu xmlns="http://xxx">
  <menuItem name="Menu1">
    <menuItem name="SubMenu1">
      <url target="webPage1.aspx" />
    </menuItem>
  </menuItem>
</menu>
于 2011-12-12T14:39:44.093 回答