2015-03-02 96 views
0

我需要使用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返回“”,““,’与作为前面的字符,以及“”,“”“和” - “作为以下字符。

我尝试这样做:

<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> 

这对以下字符工作正常,但不是前面的字符。它总是返回“”,在这种情况下,总是看起来是“Das”的最后一个字符。我能做什么?

+0

如果前面的兄弟节点不是文本节点,而是说另一个元素,该怎么办? – 2015-03-02 12:32:37

+0

目前,我认为元素之间总是至少有一个空格。 – 2015-03-02 13:34:21

回答

1

你在这里做一个明显的错误是应用字符串函数来代替preceding-sibling::text()preceding-sibling::text()[1] - 这将隔离立即前面的文本节点。

相关问题