以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]document函数的用法  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=85239)


--  作者:zhgxmllt
--  发布时间:6/9/2010 10:27:00 AM

--  [求助]document函数的用法
哪位知道document函数的具体用法?谢谢!
--  作者:Qr
--  发布时间:6/11/2010 6:34:00 PM

--  
document()  函数
  
--------------------------------------------------------------------------------

定义与用法
document()函数用来访问外部的 XML文档。外部 XML 文档必须是正确可解析的。

<xsl:value-of select="document('celsius.xml')/celsius/result[@value=$value]"/>


--------------------------------------------------------------------------------

语法
node-set document(object,node-set?)   

参数
参数  说明
object  必须。定义XML文档的URI。
node-set  可选。用来处理相关的URI。

例子 1
Document.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="document.xsl" ?>
<groups>
<groupRef>hrGroup.xml</groupRef>
<groupRef>myGroup.xml</groupRef>
</groups>

document.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
  <groups>
   <xsl:apply-templates select="/groups/groupRef"/>
  </groups>
</xsl:template>
<xsl:template match="groups/groupRef">
  <xsl:copy-of select="document(.)//group"/>

</xsl:template>
</xsl:stylesheet>

hrGroup.xml
<?xml version='1.0'?>
<group name="hr">
  <leader>mo</leader>
  <member>bo</member>
  <member>ko</member>
  <member>lo</member>
</group>

myGroup.xml
<?xml version='1.0'?>
<group name="my">
  <leader>john</leader>
  <member>jane</member>
  <member>jon</member>
  <member>jan</member>
</group>

例子 2
下面这个例子,显示如何使用两个参数。  URI,当没有
参数的基准 URI 就是 XSL 的 URI,如下,把 a.xml 放到 subdir 目录下,而另外两个在../,
如果 document('a.xml', .)的 ../作为 a.xml 的目录,就会报错,您可以实
验一下。
document2.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

   <xsl:template match="/">
   <root>
      <xsl:comment>One Argument </xsl:comment>
      <xsl:for-each select="document('b.xml')//a">
         <xsl:copy-of select="."/>
      </xsl:for-each>

      <xsl:comment>Two Argument </xsl:comment>
      <xsl:for-each select="document('a.xml', .)//a">
         <xsl:copy-of select="."/>
      </xsl:for-each>
   </root>

   </xsl:template>
</xsl:stylesheet>

Subdir/a.xml
<?xml-stylesheet type="text/xsl" href="../document2.xsl" ?>
<doc>
<a> I </a>
<a> II </a>
<a> III </a>
</doc>

b.xml
<doc>
<a> one </a>
<a> two </a>
<a> three </a>
</doc>


--  作者:zhgxmllt
--  发布时间:6/12/2010 10:31:00 AM

--  
先谢谢您的回答!想再问个问题,document函数和collection函数好像都可以对多个xml文档进行操作,那这两个函数的用法区别在哪,什么情况下怎么用?查到的资料太少了,搞不清楚
--  作者:Qr
--  发布时间:6/12/2010 11:26:00 AM

--  
collection?2.0的吧,偶还真没怎么用,自己查资料吧。
--  作者:zhgxmllt
--  发布时间:6/12/2010 2:50:00 PM

--  
collection 是XQuery中的,资料比较少


--  作者:Qr
--  发布时间:6/12/2010 6:02:00 PM

--  
二者属于不同环境下的东东,没有可比性。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
47.363ms