XPath语法

Jun 07, 2016 pm 02:56 PM
for server sql x xpath 语法

在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')
Copier après la connexion
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>'
Copier après la connexion
CREATE TABLE SalesOrders
(OrderID integer PRIMARY KEY,
OrderDate datetime,
CustomerID integer,
OrderNotes xml)
Copier après la connexion
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>')
Copier après la connexion
  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
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Impossible de terminer l'opération (Erreur 0x0000771) Erreur d'imprimante Impossible de terminer l'opération (Erreur 0x0000771) Erreur d'imprimante Mar 16, 2024 pm 03:50 PM

Impossible de terminer l'opération (Erreur 0x0000771) Erreur d'imprimante

17 façons de résoudre l'écran bleu kernel_security_check_failure 17 façons de résoudre l'écran bleu kernel_security_check_failure Feb 12, 2024 pm 08:51 PM

17 façons de résoudre l'écran bleu kernel_security_check_failure

Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Apr 17, 2024 pm 02:57 PM

Quelle est la différence entre HQL et SQL dans le framework Hibernate ?

Utilisation de l'opération de division dans Oracle SQL Utilisation de l'opération de division dans Oracle SQL Mar 10, 2024 pm 03:06 PM

Utilisation de l'opération de division dans Oracle SQL

Que signifie l'attribut d'identité dans SQL ? Que signifie l'attribut d'identité dans SQL ? Feb 19, 2024 am 11:24 AM

Que signifie l'attribut d'identité dans SQL ?

Comparaison et différences de syntaxe SQL entre Oracle et DB2 Comparaison et différences de syntaxe SQL entre Oracle et DB2 Mar 11, 2024 pm 12:09 PM

Comparaison et différences de syntaxe SQL entre Oracle et DB2

Le serveur a rencontré une erreur, 0x80070003, lors de la création d'une nouvelle machine virtuelle. Le serveur a rencontré une erreur, 0x80070003, lors de la création d'une nouvelle machine virtuelle. Feb 19, 2024 pm 02:30 PM

Le serveur a rencontré une erreur, 0x80070003, lors de la création d'une nouvelle machine virtuelle.

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Feb 26, 2024 pm 07:48 PM

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis

See all articles