【例14.4】doc.xsl.代码
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html><body>
<xsl:apply-templates/>
</body></html>
</xsl:template>
<xsl:template match="地址">
<Table border="2">
<TR>
<TD>姓名</TD>
<TD>省份</TD>
<TD>城市</TD>
<TD>街道</TD>
<TD>邮政编码</TD>
</TR>
<xsl:for-each select="名单" order-by="+姓名" >
<TR>
<TD><xsl:value-of select="姓名"/></TD>
<TD><xsl:value-of select="省"/></TD>
<TD><xsl:value-of select="城市"/></TD>
<TD><xsl:value-of select="街道"/></TD>
<TD><xsl:value-of select="邮政编码"/></TD>
</TR>
</xsl:for-each>
</Table>
</xsl:template>
</xsl:stylesheet>
在需要转换的XML文档的加入一行<?xml-stylesheet type="text/xsl" href="doc.xsl"?>,说明该XML文档需要名为doc.xsl的XSL文件转换。
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="doc.xsl"?>
<地址>
<名单>
<姓名>
<姓>李</姓>
<名>中国</名>
</姓名>
<省>广东省</省>
<城市 省="广东">广州</城市>
<街道>
北京路15号
</街道>
<邮政编码>
514000
</邮政编码>
</名单>
<名单>
<姓名>
<姓>王</姓>
<名>中</名>
</姓名>
<省>广东省</省>
<城市 省="广东">广州</城市>
<街道>
北京路15号
</街道>
<邮政编码>
514000
</邮政编码>
</名单>
<名单>
<姓名>
<姓>吴</姓>
<名>国</名>
</姓名>
<省>广东省</省>
<城市 省="广东">广州</城市>
<街道>
北京路115号
</街道>
<邮政编码>
514000
</邮政编码>
</名单>
</地址>
用IE浏览器打开上述文件,得到下列结果,
姓名
省份
城市
街道
邮政编码
李 中国
广东省
广州
北京路15号
514000
王 中
广东省
广州
北京路15号
514000
吴 国
广东省
广州
北京路115号
514000
结果表明通过转换,已经将XML文档转换为标准的HTML文档。
【例14.5】 AUTO 模式查询在查询分析器,执行下列查询:
SELECT Customers.CustomerID,Orders.OrderID,Orders.OrderDate
FROM Customers,Orders
WHERE Customers.CustomerID = Orders.CustomerID and Customers.country='UK'
ORDER BY Customers.CustomerID
FOR XML AUTO
得到下列结果(部分):
<Customers CustomerID="AROUT">
<Orders OrderID="10864" OrderDate="1998-02-02T00:00:00"/>
<Orders OrderID="10920" OrderDate="1998-03-03T00:00:00"/>
<Orders OrderID="10953" OrderDate="1998-03-16T00:00:00"/>
<Orders OrderID="11016" OrderDate="1998-04-10T00:00:00"0"/>
<Orders OrderID="10726" OrderDate="1997-11-03T00:00:00"/>
</Customers>
【例14.6】 RAW 模式查询在查询分析器,执行下列查询:
SELECT Customers.CustomerID,Orders.OrderID,Orders.OrderDate
FROM Customers,Orders
WHERE Customers.CustomerID = Orders.CustomerID and Customers.country='UK'
ORDER BY Customers.CustomerID
FOR XML RAW
得到下列结果(部分):
<row CustomerID="AROUT" OrderID="10864" OrderDate="1998-02-02T00:00:00"/>
<row CustomerID="AROUT" OrderID="10920" OrderDate="1998-03-03T00:00:00"/>
<row CustomerID="AROUT" OrderID="10953" OrderDate="1998-03-16T00:00:00"/>
<row CustomerID="AROUT" OrderID="110100:00:00"/>
例如:生成下列一个通用表:
Tag
Parent
Customer!1!
CustomerID
Order!2!
OrderID
1
Null
ALFKI
Null
2
1
ALFKI
10643
……..
…….
……..
………
【例14.7】 EXPLICIT 模式查询在查询分析器中,实施下列查询
SELECT 1 as Tag,
NULL as Parent,
Customers.CustomerID as [Customer!1!CustomerID],
NULL as [Order!2!OrderID]
FROM Customers
UNION ALL
SELECT 2,1,
Customers.CustomerID,
Orders.OrderID
FROM Customers,Orders
WHERE Customers.CustomerID = Orders.CustomerID
ORDER BY [Customer!1!CustomerID],[Order!2!OrderID]
FOR XML EXPLICIT
说明,
在第一个 SELECT 语句中,获取所有 <Customer> 元素及其特性值。在含有多个 SELECT 语句的查询中,只使用在第一个查询中指定的列名(通用表列名)。忽略在第二个 SELECT 语句中指定的列名。
在第二个查询中检索所有 <Order> 元素及其特性值.
使用 UNION ALL 组合此查询中的两个 SELECT 语句。
得到下列结果(部分):
<Customer CustomerID="ALFKI">
<Order OrderID="10643"/>
<Order OrderID="10692"/>
<Order OrderID="10702"/>
<Order OrderID="10835"/>
<Order OrderID="10952"/>
<Order OrderID="11011"/>
</Customer>
。。。。。。。
【例14.8】直接在浏览器地址栏输入查询语句例如本地服务器名为lundw2ks,虚拟目录名为testxml,FOR XML子句采用AUTO模式。
http://lundw2ks/testxml?sql=SELECT Customers.CustomerID,Orders.OrderID,Orders.OrderDate FROM Customers,Orders WHERE Customers.CustomerID = Orders.CustomerID and Customers.country='UK' FOR XML AUTO&root=ROOT
直接在浏览器输入上述URL,可得到下列XML文档的结果(部分结果):
<?xml version="1.0" encoding="utf-8"?>
- <ROOT>
- <Customers CustomerID="BSBEV">
<Orders OrderID="10289" OrderDate="1996-08-26T00:00:00" />
</Customers>
,......
</ROOT>
【例14.9】通过HTTP执行存储过程首先在目标数据库创建存储过程,名为test_sp,
create procedure test_sp
as
SELECT Customers.CustomerID,Orders.OrderID,Orders.OrderDate
FROM Customers,Orders
WHERE Customers.CustomerID = Orders.CustomerID and Customers.country='UK'
FOR XML AUTO
【例14.10】使用模板访问数据库模板代码:
<root xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<sql:query>
SELECT Customers.CustomerID,Orders.OrderID,Orders.OrderDate FROM Customers,Orders WHERE Customers.CustomerID = Orders.CustomerID and Customers.country='UK' for xml auto
</sql:query>
</root>