Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 基于上下文更改XSLT中的节点_Html_Xml_Xslt_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

Html 基于上下文更改XSLT中的节点

Html 基于上下文更改XSLT中的节点,html,xml,xslt,xslt-1.0,xslt-2.0,Html,Xml,Xslt,Xslt 1.0,Xslt 2.0,我有一个XSL文件,我想在两个不同的上下文中包含或使用它。在其中一个上下文中,我想使用'fo:block',但在另一个上下文中,我想使用'div class=“block”' 是否有某种方法可以根据上下文(可能使用参数)将XSL中的所有“fo:block”更改为“div class=“block””,或将其更改为“div class=“block”?这是一个简单的条件: <xsl:variable name="outputformat" select="'html'"/> <x

我有一个XSL文件,我想在两个不同的上下文中包含或使用它。在其中一个上下文中,我想使用'fo:block',但在另一个上下文中,我想使用'div class=“block”'


是否有某种方法可以根据上下文(可能使用参数)将XSL中的所有“fo:block”更改为“div class=“block””,或将其更改为“div class=“block”?

这是一个简单的条件:

<xsl:variable name="outputformat" select="'html'"/>
<xsl:choose>
    <xsl:when test="$outputformat = 'html'">
        <div class="Block">
            <!-- your html code -->
        </div>
    </xsl:when>
    <xsl:otherwise>
        <fo:block>
           <!-- your normal code -->
        </fo:block>
    </xsl:otherwise>
</xsl:choose>

或者,您可以创建第二个xsl文档并复制除

<fo:block/> 

你应该换成哪个

<div class="block"/>

这看起来像:

<xsl:template match="@*|node()">
    <xsl:choose>
        <xsl:when test="local-name() = 'block'">
            <xsl:element name="div">
                <xsl:attribute name="class" select="'Block'"/>
                <xsl:apply-templates select="@*"/>
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>


你能解释一下“上下文”是什么意思吗?输入中是否有可以匹配的节点?我想,如果您想创建
fo:block
div
,它不会到此为止,而是希望输出XSL-fo或HTML。维护两个不同的样式表似乎更容易,或者编写一个样式表,其中一个模式用于XSL-FO输出,另一个模式用于HTML输出。在您编写的第一个示例中,我的“HTML代码”和“普通代码”中的所有代码都相同,因此,如果我这样做,我将不得不有完全相同的代码两次,除了在第一个我将使用div class=block,在第二个我将使用fo:block。这就是我想要避免的。根据上下文,我希望所有内容包装在fo:blocks或div class=“block”中。所以我想基本上是某种智能的搜索和替换方法?在我的xslt中。如果这有意义的话。好吧,如果你想有两个不同的输出,你必须做两次。。。“是否有办法将XSL中的所有'fo:block'更改为div class='block'”下面的示例获取fo输出,将fo:block更改为div,并将其保存到另一个文件中。顺便说一句,这是做这件事的方法。您不必复制代码两次。我假设您正在使用匹配模板,并且没有对所有内容进行硬编码。只需在其中添加“yourcode”注释,而不是“yourcode”。不幸的是,其中一些注释必须是硬编码的,或者实际上大部分注释都是硬编码的。在这种情况下,您仍然可以像其他语言中的函数一样使用并调用它两次。你称之为“有”。