Select 字符表示 precedes/follows XSLT 1.0 中的一个元素

Select character that precedes/follows an element in XSLT 1.0

我需要使用 XSLT 1.0 知道某个元素之前的字符。

示例XML:

<p>Das <hi>Konzert</hi> brachte die „<hi>Sinfonie</hi>“ von Gassmann-<hi>Kröger</hi>.</p>

我需要检查此文档中的所有元素,并期望我的 XSLT 为 return“”、“„”和“.”前面的字符,“ ”、““”和“-”后面的字符。

我试过这个:

<xsl:template match="hi">
    <xsl:text>[</xsl:text>
    <xsl:value-of select="substring(preceding-sibling::text(),string-length(preceding-sibling::text()))"/>
    <xsl:text>|</xsl:text>
    <xsl:value-of select="substring(following-sibling::text(),1,1)"/>
    <xsl:text>]</xsl:text>
</xsl:template>

这适用于后续字符,但不适用于前面的字符。它总是 returns " ",在这种情况下,它似乎总是 "Das " 的最后一个字符。我能做什么?

您在这里犯的明显错误是将字符串函数应用于 preceding-sibling::text() 而不是 preceding-sibling::text()[1] - 这将立即隔离 前面的文本节点。