XSLT를 통해 한 단어를 구성하기위한 문장의 모든 단어의 첫 글자를 추출하려고합니다. 샘플 입력
문장의 모든 단어의 첫 글자를 추출하여 XSLT를 통해 한 단어로 만듭니다.
`ABC HBO ORACLE 123 (Hello Person)`
예상 출력 : 사전에
AHO123HP
감사합니다 :).
P. 나는 또한 XALAN 프로세서를 사용하고있다.
XSLT를 통해 한 단어를 구성하기위한 문장의 모든 단어의 첫 글자를 추출하려고합니다. 샘플 입력
문장의 모든 단어의 첫 글자를 추출하여 XSLT를 통해 한 단어로 만듭니다.
`ABC HBO ORACLE 123 (Hello Person)`
예상 출력 : 사전에
AHO123HP
감사합니다 :).
P. 나는 또한 XALAN 프로세서를 사용하고있다.
이 스타일이 입력으로
<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',
''),
'')),' ')"/>
감사합니다. 나 좀 도와 줘. – Bilzac
@Bilzac : 당신은 건강합니다! –
다음 용액은 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>
그러나이어야 당신에게 그것을 해결하는 방법에 대한 아이디어를 줄 수
아마도 이보다 더 나은 해결책이있을 수 있습니다. 그러나 이것은 예제를 해결합니다.
제 지식에 XALAN은 XSLT 1.0 프로세서입니다. –
알레한드로가 맞습니다. 1.0 프로세서입니다. 그러나 나는 당신의 논리를 사용하고 그것을 1.0에 맞출 수 있다고 생각합니다. 고마워요. :) – Bilzac
원하는 출력에서 숫자 일 때 완전한 단어를 원하는 것처럼 보입니다. 제발, 분명히 해줘. –
@Alejandro 예, 있습니다. – Bilzac