如何在另一个中包含一个XSLT文件的输出?

时间:2017-09-05 12:00:07

标签: xml xslt xslt-1.0 xslt-grouping

服务器端是否有任何方式包含XSLT文件?
我的意思是一个文件的输出显示在第二个文件中?

例如:

主XSLT文件:

<xsl:template match="pt">
  <xsl:comment>#include virtual="a.xsl"</xsl:comment>
</xsl:template>

第二个XSLT文件a.xslt

<xsl:template match="a">
  <xsl:variable name="ab" select="'ss'"/>
   <p><xsl:value-of select="$ab"/></p>
</xsl:template>

现在输出

  

p代码中的ss

为什么我这样做是因为我将页面分成多个组件,之后我将它们的输出包含在主XSLT文件中。每个XSLT文件都有单独的XML数据。

1 个答案:

答案 0 :(得分:0)

您不能使用XSLT样式表的输出作为输入,在单个样式表中的vanilla XSLT 1.0中再次对其进行转换。

您需要运行XSLT处理器两次,使用第一次传递的结果作为第二次传递的结果,或者您需要使用支持node-set()之类的处理器,它允许转换结果树片段回到节点集以进行进一步处理。

https://www.xml.com/pub/a/2003/07/16/nodeset.html

您可以在输出中包含任意XML,只要它是有效的XML,使用document()函数。

<强> stylesheet.xslt

<?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" indent="yes"/>

  <xsl:template match="/">
    <externalData>
      <xsl:copy-of select ="document('some.xml')"/>
    </externalData>
  </xsl:template>

</xsl:stylesheet>

<强> some.xml

<?xml version="1.0" encoding="utf-8"?>
<content>
  <foo>bar</foo>
</content>

<强>结果

<?xml version="1.0" encoding="utf-8"?>
<externalData>
  <content>
    <foo>bar</foo>
  </content>
</externalData>