0

データベースの型指定された xml 列に格納されているメニュー xml からいくつかのノードを削除したいと考えています。
メニュー xml からのスニペット -

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

次の XML DML を使用<role>して削除しようとしています -menuItem = "SubMenu1"

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>ノードの前に<url>ノードを必要とする XML スキーマに接続されているようです。

ここに投稿したものは問題なく動作します。

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 に答える