2009-09-12 6 views
1

S'il vous plaît voir ci-dessous le script SQL Server 2005Type de données XML SQL Server requête numéro

Declare @xmlData XML 
SET @xmlData = '<?xml version="1.0"?> 
<bookstore xmlns="http://myBooks"> 
    <book genre="autobiography" publicationdate="1981" 
     ISBN="1-861003-11-0"> 
    <title>The Autobiography of Benjamin Franklin</title> 
    <author> 
     <first-name>Benjamin</first-name> 
     <last-name>Franklin</last-name> 
    </author> 
    <price>8.99</price> 
    </book> 
    <book genre="novel" publicationdate="1967" 
     ISBN="0-201-63361-2"> 
    <title>The Confidence Man</title> 
    <author> 
     <first-name>Herman</first-name> 
     <last-name>Melville</last-name> 
    </author> 
    <price>11.99</price> 
    </book> 
    <book genre="philosophy" publicationdate="1991" 
     ISBN="1-861001-57-6"> 
    <title>The Gorgias</title> 
    <author> 
     <first-name>Sidas</first-name> 
     <last-name>Plato</last-name> 
    </author> 
    <price>9.99</price> 
    </book> 
</bookstore>' 

Select T.Item.query('.') 
From @xmlData.nodes('/bookstore/book') AS T(Item) 

Ce script devrait me donner la liste de tous les nœuds de livres. Mais ce n'est pas donner le comportement attendu. Si je supprime XMLNS alors ça fonctionne bien. Quelqu'un peut-il expliquer?

Ci-dessous fonctionne bien.

Declare @xmlData XML 
SET @xmlData = '<?xml version="1.0"?> 
<bookstore> 
    <book genre="autobiography" publicationdate="1981" 
     ISBN="1-861003-11-0"> 
    <title>The Autobiography of Benjamin Franklin</title> 
    <author> 
     <first-name>Benjamin</first-name> 
     <last-name>Franklin</last-name> 
    </author> 
    <price>8.99</price> 
    </book> 
    <book genre="novel" publicationdate="1967" 
     ISBN="0-201-63361-2"> 
    <title>The Confidence Man</title> 
    <author> 
     <first-name>Herman</first-name> 
     <last-name>Melville</last-name> 
    </author> 
    <price>11.99</price> 
    </book> 
    <book genre="philosophy" publicationdate="1991" 
     ISBN="1-861001-57-6"> 
    <title>The Gorgias</title> 
    <author> 
     <first-name>Sidas</first-name> 
     <last-name>Plato</last-name> 
    </author> 
    <price>9.99</price> 
    </book> 
</bookstore>' 

Select T.Item.query('.') 
From @xmlData.nodes('/bookstore/book') AS T(Item) 

Quelqu'un peut-il s'il vous plaît expliquer comment puis-je corriger premier scritp? Je veux lancer un script avec xmlns.

Répondre

2

Comme vous le dites - c'est parce que vos données XML d'origine est dans un espace de noms XML, et si tel est le cas, vous devez également utiliser cet espace de noms XML dans votre XQuery:

SELECT 
    T.Item.query('.') 
FROM 
    @xmlData.nodes('declare namespace ns="http://myBooks";/ns:bookstore/ns:book') 
    AS T(Item) 

Vous devez insérez cette partie declare namespace ns="http://myBooks"; dans votre XQuery, puis utilisez le préfixe d'espace de nommage défini ns (vous pouvez utiliser n'importe quoi ici, vraiment) pour référencer les objets XML.

Marc

Questions connexes