当前位置:Gxlcms > mysql > XPath语法

XPath语法

时间:2021-07-01 10:21:17 帮助过:189人阅读

在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
'

??
'
CREATE TABLE SalesOrders
(OrderID integer PRIMARY KEY,
OrderDate datetime,
CustomerID integer,
OrderNotes xml)
declare @x xml
set @x=
'

??Kim Abercrombie
??
? ?
? ?
? ?
??


??Margaret Smith
?? 
? ?
??

'
SELECT @x.query(
'
{
for $invoice in /Invoices/Invoice
return $invoice/Customer
}
')
  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

人气教程排行