使用禁用输出转义转换XML混合节点
关于这个问题的变体已经发布了,但我找不到任何解决基本情况的方法。我认为对这个问题的最简单版本有一个规范的答案会很好。这个问题假设XSLT1.0 我有一个包含混合节点的XML文档,例如: <paragraph> This is some text that is <bold>bold</bold> and this is some that is <italic>italicized.</italic> </paragraph> 这是一些粗体的文本 这是一些斜体字。 我通常会使用这样的转换: <xsl:template match="bold"> <b><xsl:apply-templates/></b> </xsl:template> <xsl:template match="italic"> <i><xsl:apply-templates/></i> </xsl:template> <xsl:template match="paragraph"> <p><xsl:apply-templates/></p> </xsl:template> 在我想使用disable-output-escaping=“yes”之前,它的效果非常好,这是xsl:value的一个属性。是否有一种方法可以选择混合节点的文本部分,我可以对其应用独立于嵌入节点的值 当然,这不起作用,因为我会丢失子节点: <xsl:template match="paragraph"> <p><xsl:value-of select="." disable-output-escaping="yes"/></p> </xsl:template>使用禁用输出转义转换XML混合节点,xml,xslt,Xml,Xslt,关于这个问题的变体已经发布了,但我找不到任何解决基本情况的方法。我认为对这个问题的最简单版本有一个规范的答案会很好。这个问题假设XSLT1.0 我有一个包含混合节点的XML文档,例如: <paragraph> This is some text that is <bold>bold</bold> and this is some that is <italic>italicized.</italic> </p
我知道我试图这样做的事实可能代表了我处理XML的方式中的一个固有问题,但大部分XML都是由(受信任的)用户输入生成的,我试图避免在XML->XSLT->HTML表单(如果可能)之间产生大量额外的处理代码。如果我理解正确,您希望文本节点显示为文本(
禁用输出转义=“yes”
),但转换的其余部分应正常工作(
到
等)
模板模式可以帮助:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" />
<xsl:template match="paragraph">
<p>
<xsl:apply-templates mode="literal" />
</p>
</xsl:template>
<!-- literal templates (invoked in literal mode) -->
<xsl:template match="bold" mode="literal">
<b><xsl:apply-templates mode="literal"/></b>
</xsl:template>
<xsl:template match="italic" mode="literal">
<i><xsl:apply-templates mode="literal"/></i>
</xsl:template>
<xsl:template match="text()" mode="literal">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<!-- normal templates (invoked when you don't use a template mode) -->
<xsl:template match="bold">
<b><xsl:apply-templates /></b>
</xsl:template>
<xsl:template match="italic">
<i><xsl:apply-templates /></i>
</xsl:template>
</xsl:stylesheet>
您想让
等显示为转义还是非转义?很抱歉,没有更清楚。我希望文本被转义,但我希望能够继续匹配任何子节点(如粗体)。