Templates 是否可以先运行导入的根模板?

Templates 是否可以先运行导入的根模板?,templates,xslt,import,document-root,Templates,Xslt,Import,Document Root,假设您有以下两个xsl文件: cow-wrapper.xsl test.xsl 在这种情况下,根本不调用cow-wrapper.xsl中的根匹配。有没有办法使cow-wrapper.xsl中的根模板与test.xsl中的根模板相匹配 我想要的是一种简单地导入文件并将其包装到常规输出的方法。例如,在soap信封中。从中可以看出,导入的模板的优先级始终低于具有较高导入优先级的冲突模板(其中主XSLT具有最高导入优先级),但这可能是一种合适的解决方法: <xsl:stylesheet v

假设您有以下两个xsl文件:

cow-wrapper.xsl


test.xsl


在这种情况下,根本不调用cow-wrapper.xsl中的根匹配。有没有办法使cow-wrapper.xsl中的根模板与test.xsl中的根模板相匹配

我想要的是一种简单地导入文件并将其包装到常规输出的方法。例如,在soap信封中。

从中可以看出,导入的模板的优先级始终低于具有较高导入优先级的冲突模板(其中主XSLT具有最高导入优先级),但这可能是一种合适的解决方法:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:element name="cow">
            <apply-templates select="." mode="regular">
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import href="cow-wrapper.xsl" />

    <xsl:template match="/" mode="regular">
        <!-- regular stuff to do -->
    </xsl:template>

</xsl:stylesheet>

从中可以看出,导入的模板的优先级始终低于具有较高导入优先级的冲突模板(其中主XSLT的导入优先级最高),但这可能是一种合适的解决方法:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:element name="cow">
            <apply-templates select="." mode="regular">
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import href="cow-wrapper.xsl" />

    <xsl:template match="/" mode="regular">
        <!-- regular stuff to do -->
    </xsl:template>

</xsl:stylesheet>

如果我想先“执行”导入模板中的模板,我要么在导入样式表中没有具有相同匹配模式的模板,要么这样编写:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import href="cow-wrapper.xsl" />

    <xsl:template match="/">
        <xsl:next-match/>
        <!-- regular stuff to do -->
    </xsl:template>
</xsl:stylesheet>

如果我想先“执行”导入模板中的模板,我要么在导入样式表中没有具有相同匹配模式的模板,要么这样编写:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import href="cow-wrapper.xsl" />

    <xsl:template match="/">
        <xsl:next-match/>
        <!-- regular stuff to do -->
    </xsl:template>
</xsl:stylesheet>


据我所知,这里的问题是cow-wrapper.xsl无法真正包装常规内容。无论它做了什么,都会在输出中显示为您作为常规输出的任何内容的同级。@Svish,您从未在问题中指定“cow-wrapper.xsl应该包装常规内容”。所以问题完全在于你提出问题的方式。我道歉。我想从文件名来看这是很明显的:p我将澄清这个问题。这里的问题是cow-wrapper.xsl就我所知无法真正包装常规的东西。无论它做了什么,都会在输出中显示为您作为常规输出的任何内容的同级。@Svish,您从未在问题中指定“cow-wrapper.xsl应该包装常规内容”。所以问题完全在于你提出问题的方式。我道歉。我想从文件名来看这是很明显的:p我会澄清这个问题。我担心可能是这样的是的。您的解决方法似乎是一个不错的方法:)@Svish另一个可能的选择是让您的XSL与示例中的XSL保持一致,并在主XSL中使用
,而不是
。我担心可能是这样的情况是的。您的解决方法似乎是一个不错的方法:)@Svish另一个可能的选择是让您的XSL保持您在示例中的方式,并在主XSL中使用
,而不是