如何在XSLT中获得名字的首字母和姓氏

如何在XSLT中获得名字的首字母和姓氏,xslt,Xslt,我想让你知道名字的首字母和姓氏 输入: <root> <ele name="Samp Huwani"/> <ele name="Gong Gitry"/> <ele name="Dery Wertnu"/> </root> 输出 <names>S Huwani</name> <names>G Gitry</name> <names>D Wertnu</n

我想让你知道名字的首字母和姓氏

输入:

<root>
  <ele name="Samp Huwani"/>
  <ele name="Gong Gitry"/>
  <ele name="Dery Wertnu"/>
</root>

输出

<names>S Huwani</name>
<names>G Gitry</name>
<names>D Wertnu</name>
S胡瓦尼
吉特里
维特努酒店
试用代码:

<xsl:template match="root/name">
  <names>
    <xsl:value-of select="@name" />
  </name>
</xsl:template>


我正在使用XSLT2.0。谢谢

对于给定的示例,您可以使用:

<xsl:template match="/root">
    <xsl:copy>
        <xsl:for-each select="ele">
            <name>
                <xsl:value-of select="substring(@name, 1, 1)"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="substring-after(@name, ' ')"/>
            </name>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

但是,名称通常不符合相同的模式


在XSLT2.0中,您可以通过使用正则表达式来简化(?)这一点,例如:

<xsl:value-of select="replace(@name, '^(.{1}).* (.*)', '$1 $2')"/>

对于完整的规范,您需要说明@name中可能存在哪些其他类型的值,以及您希望如何处理它们。例如,如果它包含“迈克尔·霍华德·凯”,或者包含“诺曼·福斯特爵士”,您想要什么。