XSL转换错误的输出

时间:2017-10-19 07:31:21

标签: xml xslt

翻译文本时遇到问题!

<text>This is a non breaking -</text>
<text>
    <span style="">
        <span style="">Testtext</span>
    </span>
    ‑
    <span style="">
        <span style=""> some other text</span>
    </span>
</text>

这是我从ck编辑器获得的.xml文件,在跨度之间我有一个不间断的连字符,但arial无法在我的.pdf文件中显示这个不间断的连字符。我不允许更改.pdf的字体,所以我想将非断开连字符翻译成'普通'连字符。

<xsl:template match="text">
        <fo:block>
            <xsl:choose>
                <xsl:when test="not(*) and contains(text(), '&#8209;')">
                    <xsl:value-of select="translate(text(), '&#8209;' , '-')"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:if test="contains(text(), '&#8209;')"> <!-- Here is my problem -->
                        <xsl:value-of select="translate(text(), '&#8209;' , '-')"/>
                        <xsl:apply-templates />
                    </xsl:if>
                    <xsl:if test="not(contains(text(), '&#8209;'))"> 
                        <xsl:apply-templates/>
                    </xsl:if>
                </xsl:otherwise>
            </xsl:choose>
        </fo:block>
</xsl:template>

现在我的问题是,在if之后发表评论here is my problem,当我在输出之前不应用模板时:

This is a non breaking - //thats ok
-Testtext# some other text //thats not

但如果我认为他们是<xsl:value-of select=....不起作用。

它应该是这样的:

This is a non breaking -
Testtext- some other text

1 个答案:

答案 0 :(得分:1)

为避免按text()选择多个项目的序列(我认为这会导致此处出现故障),您可以尝试直接在文本节点上应用translate函数,如下所示:

<xsl:template match="text//text()[contains(.,'&#8209;')]">
    <xsl:value-of select="translate(., '&#8209;' , '-')"/>
</xsl:template>