从单个xslt获取多个xml文档

时间:2009-10-19 20:50:34

标签: xml xslt schema

我正在尝试这个并且似乎无法让它发挥作用。有人可以看看我是否遗漏了一些明显的东西。

我在test.xsl中引用了这样的额外文档。

<xsl:value-of select="document('/customercare/library/test/test1.xml')/resources/resource/name" />

这是xml test1.xml。

<resources>
    <resource>  
        <name>configuration</name>
    </resource> 
</resources>

这是我的asp页面index.aspx中的片段调用。

<%
            Dim mm_xsl As MM.XSLTransform = new MM.XSLTransform()
            mm_xsl.setXML(Server.MapPath("/customercare/library/test/test2.xml"))
            mm_xsl.setXSL(Server.MapPath("/customercare/library/test/test.xsl"))            
            Response.write(mm_xsl.Transform())
        %>

我正在构建一个拥有数百种产品的网站。我想有一个包含高级详细信息的xml文档,例如可以从任何地方获取的每个产品的名称和图像路径,这将具有唯一的模式。然后让另一个xml doc具有唯一的模式,该模式包含特定于子部分的项目,例如包含文档路径,电话号码等的支持。

我的问题是如何从单个xslt中获取两个xml文档?

谢谢

3 个答案:

答案 0 :(得分:3)

查看 document()函数。

article概述了其用法。

答案 1 :(得分:1)

当我以您描述的方式使用XML文档时(即在转换期间要引用的查找表),我通常将它们加载到变换顶部的变量中:

<xsl:stylesheet...>
   <xsl:variable name='resources' select=document('resources.xml')/>
   <xsl:variable name='products' select="$resources/resources/products/product"/>

然后我可以在适当的地方查找这些变量的信息,例如:

<xsl:template match='product'>
   <tr>
      <td>
         <xsl:value-of select='@id'/>
      </td>
      <td>
         <xsl:value-of select='@description'/>
      <td>
      <td>
         <img src='{$products[@id=current()/@id]/image}'/>
      </td>
  </tr>
<xsl:template>

答案 2 :(得分:0)

当然,您可以在样式表中使用xsl:document()函数两次。但是你为什么这么想呢?似乎没有明显的理由这样做。

其他选项是XPath的fn:doc()函数或xsl:document元素。