XPath语法

WBOY
WBOY원래의
2016-06-07 14:56:521378검색

在SQL Server 2005中,FOR XML 功能得到了增强,它有了对根元素和元素名称的新的选项、使用FOR XML 调用以便你可以建立复杂的层次关系的能力、和一个新的使得你可以定义将要使用XPath 语法来提取的XML结构的PATH 模式,如下面的示例所示: SELECT ProductID

  在SQL Server 2005中,FOR XML 功能得到了增强,它有了对根元素和元素名称的新的选项、使用FOR XML 调用以便你可以建立复杂的层次关系的能力、和一个新的使得你可以定义将要使用XPath 语法来提取的XML结构的PATH 模式,如下面的示例所示:
SELECT ProductID AS '@ProductID',
ProductName AS 'ProductName'
FROM Products
FOR XML PATH ('Product'), ROOT ('Products')
  这个查询返回下面的XML:


Widget


Sprocket


  除了增强SQL Server 2000已推出的XML功能,SQL Server 2005增加了一个新的、本地的xml 数据类型,使得你可以为XML数据创建变量和列,如下面的示例所示:
CREATE XML SCHEMA COLLECTION ProductSchema AS
'

  
'
  你可以使用xml 数据类型来存储数据库中的文档或数据。列和变量可以用于非类型化的XML或类型化的XML,后者是对一个XML Schema 定义(XML Schema Definition ,XSD)的schema有效。如果要为数据验证进行定义,开发人员可以使用CREATE XML SCHEMA COLLECTION 语句,如下面的示例所示:
  在创建了一个schema 集合后,你可以通过参照schema集合将一个xml变量或列与它所包含的schema 声明结合起来,如下面的示例所示:
CREATE TABLE SalesOrders
(OrderID integer PRIMARY KEY,
OrderDate datetime,
CustomerID integer,
OrderNotes xml)
  类型化XML在插入值或更新值时对关联的schema 集合的声明进行验证,这使得可以为了遵从性检查或兼容性原因而加强关于XML数据的结构的业务规则。

 XML 数据类型还提供了一些方法,使得你可以使用它们来查询和操纵实例的XML数据。例如,你可以使用query 方法来查询xml 数据类型的一个实例的XML数据,如下面的示例所示: [table][tr][td]declare @x xml
set @x=
'

  Kim Abercrombie
  
   
   
   
  



  Margaret Smith
  
   
  


'
SELECT @x.query(
'
{
for $invoice in /Invoices/Invoice
return $invoice/Customer
}
')
  这个例子中的查询使用了一个XQuery 表达式,这个表达式找出文档中的每一个Invoice 元素,并返回一个包含每一个Invoice 元素的Customer元素的XML文档,如下面的示例所示:

  Kim Abercrombie
  Margaret Smith

  SQL Server 2005中的另外一个显著的与XML相关的特性是对XML索引的支持。你可以为类型化xml的列创建首要和次要的XML索引来增强XML查询性能,一个首要的XML索引是一个XML实例的所有节点的部分表示,查询处理器可以使用它来快速的找到一个XML值中的节点。在你创建了一个首要的XML索引之后,你可以创建次要的XML索引来提高特定的查询类型的性能。下面的示例创建了一个首要的XML索引,和一个PATH类型的次要XML索引,它可以提高使用XPath表达式来标识一个XML实例中的节点的查询的性能。
  CREATE PRIMARY XML INDEX idx_xml_Notes
  ON SalesOrders (Notes)
  GO
  CREATE XML INDEX idx_xml_Path_Notes
  ON SalesOrders (Notes)
  USING XML INDEX idx_xml_Notes
  FOR PATH
  GO

SELECT ProductID AS '@ProductID',
ProductName AS 'ProductName'
FROM Products
FOR XML PATH ('Product'), ROOT ('Products')
CREATE XML SCHEMA COLLECTION ProductSchema AS
'<?xml version="1.0" encoding="UTF-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
??<!-- schema declarations go here -->
</xs:schema>'
CREATE TABLE SalesOrders
(OrderID integer PRIMARY KEY,
OrderDate datetime,
CustomerID integer,
OrderNotes xml)
declare @x xml
set @x=
'<Invoices>
<Invoice>
??<Customer>Kim Abercrombie</Customer>
??<Items>
? ?<Item ProductID="2" Price="1.99" Quantity="1" />
? ?<Item ProductID="3" Price="2.99" Quantity="2" />
? ?<Item ProductID="5" Price="1.99" Quantity="1" />
??</Items>
</Invoice>
<Invoice>
??<Customer>Margaret Smith</Customer>
??<Items> 
? ?<Item ProductID="2" Price="1.99" Quantity="1"/>
??</Items>
</Invoice>
</Invoices>'
SELECT @x.query(
'<CustomerList>
{
for $invoice in /Invoices/Invoice
return $invoice/Customer
}
</CustomerList>')
  CREATE PRIMARY XML INDEX idx_xml_Notes 
  ON SalesOrders (Notes) 
  GO 
  CREATE XML INDEX idx_xml_Path_Notes 
  ON SalesOrders (Notes) 
  USING XML INDEX idx_xml_Notes 
  FOR PATH 
  GO
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Hierarchyid数据类型다음 기사:用SQL得到全排列