2012-03-07 19 views
0
DECLARE @str NVARCHAR(MAX) 
SET @str = 
    '<bands > 
    <title>my bands</title> 

    <band> 
     <fullName>beatles</fullName> 
     <members> 
       <member age="12">john </member> 
       <member age="13">paul </member> 
       <member age="14">george </member> 
       <member age="15">ringo </member> 
      </members> 
    </band> 


    <band> 
     <fullName>doors</fullName> 
     <members> 
       <member age="20">jim </member> 
       <member age="50">ray </member> 
       <member age="40">john </member> 
       <member age="30">robby </member> 
      </members> 
    </band> 

</bands>' 

クエリ:SQL Server OPENXMLが正しく動作しませんか?

DECLARE @idoc int 
EXEC sp_xml_preparedocument @idoc OUTPUT, @str 

SELECT * 
FROM  OPENXML (@idoc, '/bands/band/members',2) 
      WITH (member NVARCHAR(MAX)  ) 

私の結果は以下のとおりです。

enter image description here

はなぜですか?

私は全体のメンバーを見ることが期待されています.... XPATH /bands/band/membersは、複数の子を含むノードを参照しています。

私は間違っていますか?

答えて

3

このあなた

DECLARE @idoc int 

EXEC sp_xml_preparedocument @idoc OUTPUT, @str 

SELECT * 
FROM 
    OPENXML (@idoc, '/bands/band/members/member', 2) 
    WITH 
    (
     member NVARCHAR(20) '.', 
     age int '@age', 
     fullName NVARCHAR(20) '../../fullName' 
    ) 
+0

+1メンバーのすべてを与える必要があります - myneが仕事didntはなぜ – Lamak

+0

はあなたがexaplinできる完璧な作品? –

+0

文書全体に「」のインスタンスが2つしかないので、2行しか戻っていませんでした。 ''を選択したときに、XPathが停止し、子に移動しなかった場所です。また、 '.'は現在の要素の値を返します。 –

関連する問題