我试图通过XSLT提取句子的每个单词的第一个字母以形成一个单词。
样本输入
`ABC HBO ORACLE 123 (Hello Person)`
预期产出:
AHO123HP
提前致谢:)。
P.S。我也在使用XALAN处理器。
答案 0 :(得分:2)
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text/text()" name="FirstLetterAndNumber">
<xsl:param name="string" select="concat(normalize-space(translate(.,',.()`','')),' ')"/>
<xsl:if test="$string != ''">
<xsl:variable name="word" select="substring-before($string,' ')"/>
<xsl:choose>
<xsl:when test="number($word)=number($word)">
<xsl:value-of select="$word"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($word,1,1)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="FirstLetterAndNumber">
<xsl:with-param name="string" select="substring-after($string,' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
使用此输入:
<root>
<text>`ABC HBO ORACLE 123 (Hello Person)`</text>
<text>`ABC HBO ORACLE123 (Hello Person)`</text>
<text>`ABC 123 (Hello Person)`</text>
</root>
结果:
<root>
<text>AHO123HP</text>
<text>AHOHP</text>
<text>A123HP</text>
</root>
注意:如果你事先不知道要剥离的特殊字符,你应该这样做:
<xsl:param name="string"
select="concat(
normalize-space(
translate(.,
translate(.,
' qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890',
''),
'')),' ')"/>
答案 1 :(得分:1)
以下解决方案未在Xalan中测试,而是在Saxon 9B中测试。但它至少可以让你知道如何解决它:
<强>输入:强>
<?xml version="1.0" encoding="UTF-8"?>
<text>ABC HBO ORACLE 123 (Hello Person)</text>
<强> XSLT:强>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="text">
<xsl:copy>
<xsl:variable name="tokens" select="tokenize(.,' ')" as="xs:string+"/>
<xsl:value-of select="
for $i in $tokens return
if ($i castable as xs:integer)
then replace($i, '[^A-z\d]', '')
else substring(replace($i, '[^A-z\d]', ''), 1, 1)" separator=""/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
<?xml version="1.0" encoding="UTF-8"?>
<text>AHO123HP</text>
对此可能有更好的解决方案,但这解决了您的示例案例。