`

用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 语句的应用

    在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。…………

    XML Path Language (XPath).pdf

    XML Path Language xml语言

    XPathUtil,根据Xpath解析xml文件

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

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

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

    sqlserver FOR XML PATH 语句的应用

    大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。

    Xml path 语法

    基本讲述了xml的基本的路径寻找规则。可以轻松的学到如何找到某个节点或者某些符合条件的节点。xml的寻址规则

    将结果转换成xml的jar

    将数据结果转换成xml的工具类。 1.结果数据格式 Map&lt;Object, Object&gt; map = new HashMap&lt;Object, Object&gt;(); List&lt;Object&gt; List = new ArrayList&lt;Object&gt;();// 创建一个容器 List.add...

    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

    ACCESS 分组合并

    由于ACCESS 没有oracle的listagg函数,也没有sql server这种 for xml path 这种, 要实现分组合并需要自定义一个函数,理解了 for xml path 这个就很好理解了。

    一个C#处理XML的类

    /// string xmlPath = Server.MapPath("/EBDnsConfig/DnsConfig.xml"); //获取xml路径 /// DataSet ds = Serial.XmlObj.GetXml(xmlPath); //读取xml到DataSet中 /// &lt;/summary&gt; /// &lt;param name="XmlPath"&gt;...

    使用5.0新特性animated-vector标签引用xml中的svg path元素

    使用5.0新特性animated-vector标签引用xml中的svg path元素

    aspose-cells-8.5.2.jar带license.xml

    Resource resource = new ClassPathResource("license.xml"); BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream())); License license = new License(); license....

    An Adaptive Storage Manager for XML Documents

    Effective and efficient management and manipulation of XML documents requires stable decisions at the time a document enters the XML DBMS to provide for storage structures which are adjusted to the ...

    XML Path Language (XPath) 2.0标准.pdf

    XML Path Language (XPath) 2.0标准 pdf 详细描述XPath2.0的全部语法,包括上下文无关文法的表达式,及详细说明 做语法分析绝对少不了

    Python & XML - XML Processing with Python, First Edition (2002).pdf

    The SGML migration path eventually changed to an XML migration path as XML acceptance grew. Though that goal has not yet been achieved (he is still working on it), Fred has substantially changed ...

    LINQ XML控制类

    /// 将xml对象转化成DataTable /// /// &lt;returns&gt;&lt;/returns&gt; public DataTable CoverToTable() { if (this._xmlDocumentdoc != null) { DataSet dsxml = null; using (XmlReader reader = new ...

    foundations of xml processing

    Part I establishes basic concepts, starting with schemas, tree automata and pattern matching, and concluding with static typechecking for XML as a highlight of the book. In Part II, the author turns ...

    XML Path Event API-开源

    XML路径事件API是一个以C#/。NET为重点的编程接口,它允许以流式(类似SAX)的方式对XML文档进行XPath样式处理。

    asp.net操作XML

    using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml")); 。。。

Global site tag (gtag.js) - Google Analytics