下面是我的XML,它包含在节点下面。
<richtext >
<par def="3">
paragraph value 1
<run>
<font style="underline" />run value 1
</run>.
paragraph value 2
<run>
<font style="underline" />run value 2
</run>
paragraph value 3
<run>
<font style="underline" />run value 2 <br /> run value on new line
</run>
paragraph value 4
</par>
</richtext>
我正在使用下面的xslt将上面的xml转换为html。我是xslt的新手,请帮助我。
<xsl:template match="/">
<div>
<xsl:apply-templates select="richtext" />
</div>
<xsl:template name="richtext">
<xsl:apply-templates select="par" />
<xsl:apply-templates select="table" />
<xsl:template match="par">
<p>
<xsl:if test="text()">
<xsl:value-of disable-output-escaping="yes" select="text()" />
<xsl:value-of disable-output-escaping="yes" select="*/following-sibling::text()" />
</xsl:if>
<xsl:if test="run">
<xsl:apply-templates select="run" />
<xsl:value-of disable-output-escaping="yes" select="run/following-sibling::text()" />
</xsl:if>
</p>
<xsl:template match="run">
<span>
<xsl:call-template name="style" />
<xsl:value-of disable-output-escaping="yes" select="current()" />
</span>
我想在html输出下面
<p>
paragraph value 1
<span style="underline">
run value 1
</span>.
paragraph value 2
<span style="underline">
run value 2 <br /> run value on new line
</span>
paragraph value 3
<span style="underline">
run value 2
</span>
paragraph value 4
</p>
请查看更新的HTML输出。你能告诉我该怎么办吗?我想从xml保留样式。
编辑:如果我们在XML中添加
,那么我要在HTML的新行中
之后的文本。
答案 0 :(得分:1)
您似乎想执行以下操作:
richtext
转换为div
par
转换为p
run
转换为span
font
转换为属性在这种情况下,应使用一系列简单的模板来完成。
尝试使用此XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="richtext">
<div>
<xsl:apply-templates select="par|table" />
</div>
</xsl:template>
<xsl:template match="par">
<p>
<xsl:apply-templates />
</p>
</xsl:template>
<xsl:template match="run">
<span>
<xsl:call-template name="style" />
<xsl:apply-templates />
</span>
</xsl:template>
<xsl:template match="font" />
<xsl:template name="style">
<xsl:attribute name="style">
<xsl:for-each select="font">
<xsl:if test="position() > 1">; </xsl:if>
<xsl:value-of select="@style" />
</xsl:for-each>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
请注意,此处实际上不需要匹配“字体”的模板。由于示例中的font
元素没有子元素,因此您可以省略模板,因为内置模板将跳过该模板,并且不输出任何内容。