`

用FOR XML PATH将查询结果以XML输出

 
阅读更多

本文从此而来
http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html

SQL Server数据库中FOR XML PATH 是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数和存储过程来完成的工作。本文以实例的形式演示了FOR XML PATH的使用过程,希望会对读者有所帮助。

AD:

FOR XML PATH是将查询结果集以XML形式展现,使用它我们可以简化我们查询语句的操作。本文先介绍了FOR XML PATH 的基本操作,然后结合实例将FOR XML PATH 的强大功能予以说明。

一.FOR XML PATH 简单介绍

那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:



用FOR XML PATH将查询结果以XML输出

接下来我们来看应用FOR XML PATH的查询结果语句如下:

    SELECT * FROM @hobby FOR XML PATH

结果:
    <row> 
     
    <hobbyID>1</hobbyID> 
     
    <hName>爬山</hName> 
     
    </row> 
     
    <row> 
     
    <hobbyID>2</hobbyID> 
     
    <hName>游泳</hName> 
     
    </row> 
     
    <row> 
     
    <hobbyID>3</hobbyID> 
     
    <hName>美食</hName> 
     
    </row> 


由此可见FOR XML PATH 可以将查询结果根据行输出成XML格式!

那么,如何改变XML行节点的名称呢?代码如下: 

 
  SELECT * FROM @hobby FOR XML PATH('MyHobby') 


结果一定也可想而知了吧?没错原来的行节点<row> 变成了我们在PATH后面括号()中,自定义的名称<MyHobby>,结果如下:

   
<MyHobby> 
     
    <hobbyID>1</hobbyID> 
     
    <hName>爬山</hName> 
     
    </MyHobby> 
     
    <MyHobby> 
     
    <hobbyID>2</hobbyID> 
     
    <hName>游泳</hName> 
     
    </MyHobby> 
     
    <MyHobby> 
     
    <hobbyID>3</hobbyID> 
     
    <hName>美食</hName> 
     
    </MyHobby> 


这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:

  
 SELECT hobbyID as 'MyCode',hName as 'MyName' FROM @hobby FOR XML PATH('MyHobby') 


那么这个时候我们列的节点名称也会编程我们自定义的名称<MyCode>与<MyName>结果如下:

  
 <MyHobby> 
     
    <MyCode>1</MyCode> 
     
    <MyName>爬山</MyName> 
     
    </MyHobby> 
     
    <MyHobby> 
     
    <MyCode>2</MyCode> 
     
    <MyName>游泳</MyName> 
     
    </MyHobby> 
     
    <MyHobby> 
     
    <MyCode>3</MyCode> 
     
    <MyName>美食</MyName> 
     
    </MyHobby> 


噢!既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码:

  
 SELECT '[ '+hName+' ]' FROM @hobby FOR XML PATH('') 


没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:

[ 爬山 ][ 游泳 ][ 美食 ]

那么其他类型的列怎么自定义?没关系,我们将它们转换成字符串类型就行啦!例如:

  
 SELECT '{'+STR(hobbyID)+'}','[ '+hName+' ]' FROM @hobby FOR XML PATH('') 


好的FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!

接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。



二.一个应用场景与FOR XML PATH应用

首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:

[img][/img]

用FOR XML PATH将查询结果以XML输出

这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:

   SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM (  
     
    SELECT sName,  
     
    (SELECT hobby+',' FROM student   
     
    WHERE sName=A.sName   
     
    FOR XML PATH('')) AS StuList  
     
    FROM student A   
     
    GROUP BY sName  
     
    ) B  

结果如下:



分析: 好的,那么我们来分析一下,首先看这句:

  
 SELECT hobby+',' FROM student   
     
    WHERE sName=A.sName   
     
    FOR XML PATH('') 

这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!

那么接着看:

  
 SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM (  
     
    SELECT sName,  
     
    (SELECT hobby+',' FROM student   
     
    WHERE sName=A.sName   
     
    FOR XML PATH('')) AS StuList  
     
    FROM student A   
     
    GROUP BY sName  
     
    ) B   


剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:



用FOR XML PATH将查询结果以XML输出

可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby  就是来去掉逗号,并赋予有意义的列明!
分享到:
评论

相关推荐

    SQL Server FOR XML PATH 语句的应用

    在数据库操作中,将查询结果转换为XML格式的需求十分常见。SQL Server 提供了多种方法来生成XML数据,其中`FOR XML PATH`是最常用的方法之一。通过使用`FOR XML PATH`语句,可以将SQL Server中的数据查询结果转换成...

    sqlserver FOR XML PATH 语句的应用

    通过这个语句,你可以将 SQL 查询结果转换成 XML 格式,便于数据交换、存储或者进一步处理。以下是对 `FOR XML PATH` 语句的详细解释和应用示例。 `FOR XML PATH` 的基本语法是: ```sql SELECT column_list FROM ...

    sql 输出xml

    首先,我们来看下`FOR XML PATH`函数的使用,这是在SQL Server中用来将查询结果输出为XML格式的一个重要工具。通过指定`PATH`子句,你可以控制输出的XML结构。如果省略`PATH`子句,那么输出的XML将是一个单节点,...

    FOR XML子句在SQL Server中的用法比较.pdf

    RAW方式是将查询结果集中的每一行数据转换成一个XML元素的过程,它是最基础也是最简单的转换方式。在RAW模式下,每行数据都会被映射为一个名为“row”的XML元素,并且非空的列值会被映射为该元素的属性值。这种方式...

    oracle数据库的xml文件数据查询

    `XMLTable`函数是Oracle提供的一种用于解析XML文档的方法,它可以将XML数据转换为关系表形式,便于使用SQL进行查询操作。在给定的例子中,使用了`XMLTable`函数来解析XML文档,并从中提取出所需的`id`和`name`字段...

    access数据库数据转换为xml文件

    - **导出XML**:在Access中,可以使用“导出”功能将表或查询的结果导出为XML文件。步骤包括打开Access数据库,选择要导出的表或查询,然后在“文件”菜单中选择“导出”,在导出向导中选择XML格式,设定导出选项,...

    Xml path 语法

    ### XML Path 语法详解 #### 一、XML与XPath简介 XML(Extensible Markup Language)是一种标记语言,用于描述数据的格式。它采用一种自描述的方式定义数据结构,因此非常适合于存储和传输结构化数据。XPath是一种...

    XML Path Language (XPath).pdf

    在深入探讨XML路径语言(XPath)之前,我们首先应明确,XPath是一种强大的查询语言,用于在XML文档中定位元素和属性。XPath由W3C(万维网联盟)推荐,并被设计为XSLT(XSL转换)和XPointer的一部分。它允许开发者...

    XPathUtil,根据Xpath解析xml文件

    根据xmlPath路径,找到对应的xml文件,进行解析!之前找了好多感觉和自己的需求不太一样,这个可以根据Xpath解析出来xml里所有的信息,十分好用 举个例子 xmlPath = "E://upload/xml/1580242.163.xml"; XPathUtil util ...

    java读取跟输出xml文件

    本教程将介绍如何使用Java读取和输出XML文件,主要涉及两个库:JDOM2和XStream。 首先,我们来了解一下JDOM2。JDOM2是一个针对Java平台的API,专门用来处理XML文档。它提供了方便的方法来创建、修改和读取XML文档。...

    XML与XMLSchema

    - **SAX(Simple API for XML)**:事件驱动的解析方式,适用于处理大型XML文档,因为它不将整个文档加载到内存中。 - **XSLT(Extensible Stylesheet Language Transformations)**:用于转换XML文档,将XML格式...

    基于Xpath的xml文件查询和更新

    在本主题中,我们将深入探讨基于Xpath的XML文件查询和更新。 **Xpath基本概念** 1. **节点类型**:Xpath中的节点包括元素(element)、属性(attribute)、文本(text)、命名空间(namespace)、处理指令...

    XML查询语句转换成SQL语句的实现.pdf

    XPath 表达式查询结果是一个有序的节点标识符(ID)集合。Given an ID later, the application program can extract and retrieve related elements. Reconstruct 方式:这种方式结合了选择和抽取,可以从输入的 XML...

    JSP结合XML+XSLT将输出转换HTML

    现在,我们将使用JSP来处理XML和XSLT的转换。在JSP中,我们可以使用`javax.xml.transform.Transformer` API来完成这一任务。以下是一个基本的JSP示例,展示了如何读取XML和XSLT文件并进行转换: ```jsp *, javax....

    基于XML的查询系统

    通过CSS,我们可以定义字体、颜色、布局等视觉元素,使得查询结果以用户友好的方式展现。同时,XSL(Extensible Stylesheet Language)可能被用来转换XML数据为HTML或其他格式,以便在网页上展示或者进行进一步处理...

    使用XMLDocument操作xml文件.zip_PMF_c# xml_xml

    它可以加载XML文件、创建新的XML文档、修改现有文档,并将其保存回磁盘或以字符串形式输出。以下是一些关于XMLDocument的基本操作: 1. **加载XML文件**:可以使用Load方法从文件或流加载XML文档。例如: ```csharp...

    VS2010单元测试的coverage文件转换为xml文件源代码

    1. VS2010的单元测试coverage文件无法通过命令行转换为xml文件。 2. 这里C#代码,读取coverage文件,然后转换为xml... xmlPath: the xml path for output. example: Coverage2xml e:\data.coverage e:\debug e:\xx.xml

    QT使用TinyXML开源库解析XML文件

    QT框架是广受欢迎的开源...不过,请注意,尽管TinyXML库简单易用,但它并不支持XPath查询和XML Schema验证,如果你的项目需要这些高级功能,可能需要考虑使用更强大的库,如Qt自带的QDomDocument或QtXmlPatterns模块。

    C# LinqXML使用LINQ技术对XML文件进行读取

    4. **转换查询结果**:LINQ查询的结果通常是一个集合,你可以将其转换为其他类型,如`List&lt;T&gt;`。 ```csharp List&lt;string&gt; valuesList = filteredElements.Select(e =&gt; e.Value).ToList(); ``` **三、遍历查询...

    SQL_Server_2008中XML应用

    为了将 SQL Server 2008 中的单个基本表数据导出为 XML 文档格式,可以使用带有 `FOR XML` 子句的 `SELECT` 查询语句。例如,假设有一个名为 `students` 的学生表,若想将此表中的数据导出为 XML 格式,可以使用以下...

Global site tag (gtag.js) - Google Analytics