Поскольку вы хотите удалить только первый и последний символы из строки, это более простое преобразование делает именно это :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="yyy/text() | zzz/text()">
<xsl:value-of select="substring(.,2, string-length() -2)"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML:
<xxx>
<yyy>
some text with spaces inside
</yyy>
<zzz>
another text
</zzz>
</xxx>
желаемый, правильный результат получается :
<xxx>
<yyy>some text with spaces inside</yyy>
<zzz>another text</zzz>
</xxx>
Примечание : в более сложном случаевозможно, вы захотите удалить все начальные пробелы и все конечные пробелы.
Это можно сделать, если вы используете функцию / шаблон trim()
из FXSL :
Демонстрация использования trim()
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="trim.xsl"/>
<!-- to be applied on trim.xml -->
<xsl:output method="text"/>
<xsl:template match="/">
'<xsl:call-template name="trim">
<xsl:with-param name="pStr" select="string(/*)"/>
</xsl:call-template>'
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к следующему документу XML:
<someText>
This is some text
</someText>
желаемый (обрезанный) результат получается :
'This is some text'