2011-12-12 2 views
0

데이터베이스의 입력 된 xml 열에 저장된 메뉴 xml에서 일부 노드를 삭제하려고합니다.SQL Server - xml 유형 열 - XML ​​DML

Msg 6965, Level 16, State 1, Line 1
XML Validation: Invalid content. Expected element(s):http://xxx:role where element 'http://xxx:url' was specified.

: 메뉴 XML에서
발췌문 -이 오류를

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]) 
') 

그러나 점점 -

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

나는 다음 XML DML을 사용하여 menuItem = "SubMenu1"에서 <role>을 삭제하는 것을 시도하고있다 제발 할 수있어. 내가 여기서 뭘 놓치고 있는지.

감사합니다.

답변

1

노드가 <url> 노드 앞에 <role> 노드가 필요한 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> 
+0

내가 여러 노드가있는 경우에, 나는 만 갖는 삭제할 수 있도록, 또한 내가 텍스트 'role1'와 노드를 삭제할 수있는 방법을 안내시겠습니까 :-) 알고 좋은 특정 텍스트 값. – iniki

+0

@iniki -'ns : role [1]'을'ns : role [.]로 대체하십시오. = "role1"]'이고 값이 'role1' 인 모든' '노드가 삭제됩니다. –

+0

답장을 보내 주셔서 감사합니다.하지만이 오류가 발생합니다 - 복합 콘텐츠 요소에 'fn : data()'를 암시 적으로 적용하거나 적용 할 수 없습니다. 'xs : anyType'in inferred type '요소 (ns {xxx} xs : anyType) '. – iniki