如何在 xslt 中添加自定义标签?



>我们可以在XSLT中添加自定义标记或函数吗?我将再次解释我在我的演示中添加了一个标签include-html.当我们在我的样式表中发现include-html它与标签值匹配该模板时,我们可以在 XSLT 中添加任何逻辑吗(与我们在apply-template中所做的相同)并获取它值并显示在输出中。

这是我的代码。 http://xsltransform.net/6pS1zDt/1

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<hmtl>
<head>
<title>New Version!</title>
</head>
<include-html>a</include-html>
</hmtl>
</xsl:template>
<xsl:template match="a">
<xsl:variable name="ab" select="'ss'"/>
<p><xsl:value-of select="$ab"/></p>
</xsl:template>
</xsl:transform>

在我的示例中,我正在编写ainclude-html值。否,它与模板匹配并返回**<p>ss</p>**

<include-html>a</include-html>

预期产出

**<p>ss</p>**

您可以使用某种元样式表来实现这一点(我们将其命名为test.xslt):

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>  
<xsl:template match="/whatever">
<hmtl>
<head>
<title>New Version!</title>
</head>
<include-html>a</include-html>
</hmtl>
</xsl:template>
<xsl:template match="include-html[text()='a']">
<xsl:variable name="ab" select="'ss'"/>
<p><xsl:value-of select="$ab"/></p>
</xsl:template>
</xsl:transform>

如果将其作为 XSLTXML 输入传递给 XSLT 处理器,例如

xsl.sh test.xslt test.xslt

输出为

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="yes"/>
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>  
<xsl:template match="/whatever">     <!-- must NOT match -->
<hmtl>
<head>
<title>New Version!</title>
</head>
<p>ss</p>                        <!-- REPLACED! -->
</hmtl>
</xsl:template>
<xsl:template match="include-html[text()='a']">
<xsl:variable name="ab" select="'ss'"/>
<p>
<xsl:value-of select="$ab"/>
</p>
</xsl:template>
</xsl:transform>

我想这很接近你想要的...

相关内容

  • 没有找到相关文章

最新更新