请参见下面的SQL Server 2005脚本
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)
这个脚本应该给我所有书籍节点的列表。但这并没有带来预期的行为。如果我删除XMLNS,则工作正常。谁能解释?
以下工作正常。
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)
谁能解释我如何更正第一个字词?我想用xmlns运行脚本。
就像您说的那样-这是因为原始XML数据位于XML名称空间中,如果是这种情况,则还需要在XQuery中使用该XML名称空间:
SELECT T.Item.query('.') FROM @xmlData.nodes('declare namespace ns="http://myBooks";/ns:bookstore/ns:book') AS T(Item)
您需要将该declare namespace ns="http://myBooks";部分插入XQuery,然后使用定义的名称空间前缀ns(实际上可以在此处使用任何东西)来引用XML对象。
declare namespace ns="http://myBooks";
ns
马克