我编写了一个xslt来读取一些xml文件名并对它们进行一些操作 我用一个for-each来逐个工作。我在参数$ path中有每个路径。
但是现在我想输出将外部样式表应用于这些文件的结果。我会写类似
的东西<div> <something like xsl-transform($extern-xslt,$path)> </div>
在主html输出中包含转换的结果树。 有可能吗?
答案 0 :(得分:2)
您可以使用xsl:import
将外部样式表导入主样式表,然后只需将模板应用于该外部XML文件,您可以使用document
函数加载该文件。
<div><xsl:apply-templates select="document($path)"/></div>
如果外部样式表中的模板会与主样式表中的模板发生冲突,则可以为它们使用不同的mode。
答案 1 :(得分:1)
您可以使用document()
XPath函数加载外部XML文件。这将返回一个节点集,可以使用<xml:apply-templates>
调用进行解析。包含外部样式表可以使用<xsl:include>
标记来完成。
<xsl:include href="$external"/>
<xsl:apply-templates select="document($path)"/>
答案 2 :(得分:0)
我写了一个读取的xslt 一些xml文件名并做了一些 对他们的操作。我使用for-each 一个接一个地工作。我各有一个 参数$ path中的路径。
但现在我想输出 申请外部的结果 样式表到那些文件
解决方案由这些成分组成:
使用标准XSLT document()
函数加载和访问外部XML文档。
使用<xsl:import>
指令导入外部样式表。
外部样式表中的模板必须位于特殊mode中,而不是主样式表使用。
在需要“外部转换”结果的位置,发出<xsl:apply-templates>
选择外部文档的必要节点(通常是根节点/
或顶部元素/*
)。 <xsl:apply-templates>
上指定的模式应与外部样式表中使用的模式相同。
这是一个简单的小例子(没有导入外部样式表,样式表中嵌入了“外部文档”,并且没有使用模式):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:my="my:my"
>
<!-- <xsl:import href="myExternal.xsl"/> -->
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<my:div>
<h2>Weather</h2>
<p >It will be raining today</p>
</my:div>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="insertContents">
<xsl:apply-templates select="document('')/*/my:div/*"/>
</xsl:template>
</xsl:stylesheet>
对此XML文档应用此转换时:
<html>
<h1>Today's News </h1>
<insertContents/>
</html>
产生了所需的结果:
<html>
<h1>Today's News </h1>
<h2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">Weather</h2>
<p xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">It will be raining today</p>
</html>
注意以上无关的命名空间仅仅是由于此示例的简化 - 如果外部XML文档位于其自己的文件中,则不会生成它们。