XSLT:追加スペース"長い"という言葉
質問
あるコード:
<p>
Lorem ipsum dolor sit ametconsecteturadipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
Duis aute iruredolorinreprehenderit in voluptate
velit esse cillum doloreeufugiatnullapariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</p>
受け取る必要があ:
<p>
Lorem ipsum dolor sit <span class="spaced">a m e t c o n s e c t e t u r a d i p i s i c i n g</span> elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
Duis aute <span class="spaced">i r u r e d o l o r i n r e p r e h e n d e r i t</span> in voluptate
velit esse cillum <span class="spaced">d o l o r e e u f u g i a t n u l l a p a r i a t u r</span>. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
</p>
の感覚で構成されて 分割 "長い"の言葉 スペース.入れるスペース後に書などの言葉です。その後必要があ を締結 この言葉は、タグクラス"スペース".
言葉には"長期"の場合の量の文字をこの言葉は10日(一例です。設定することができる任意の値).
どのようこの問題を解決する手段 xslt?
解決 2
非常に賢い人は私に彼らのおかげに巨大な決定を、促しました。任意のextansionsなしXSLT 1.0での作品。のそれは私の解決策ではありません。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" media-type="text/xhtml" version="1" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="p">
<p>
<xsl:call-template name="tokens">
<xsl:with-param name="str" select="text()" />
</xsl:call-template>
</p>
</xsl:template>
<xsl:template name="tokens">
<xsl:param name="str" />
<xsl:choose>
<xsl:when test="contains($str, ' ')">
<xsl:call-template name="checklength">
<xsl:with-param name="str" select="substring-before($str, ' ')" />
</xsl:call-template>
<xsl:call-template name="tokens">
<xsl:with-param name="str" select="substring-after($str, ' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="checklength">
<xsl:with-param name="str" select="$str" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="checklength">
<xsl:param name="str" />
<xsl:choose>
<xsl:when test="string-length($str) > 10">
<span class="spaced">
<xsl:call-template name="insertspaces">
<xsl:with-param name="str" select="$str" />
</xsl:call-template>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str" />
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template name="insertspaces">
<xsl:param name="str" />
<xsl:choose>
<xsl:when test="string-length($str) > 1">
<xsl:value-of select="substring($str, 1, 1)" /><xsl:text> </xsl:text>
<xsl:call-template name="insertspaces">
<xsl:with-param name="str" select="substring($str, 2, string-length($str) - 1)" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
他のヒント
ここでは、XSLTスタイルシート2.0ることができることを走 アングロサクソン9 または AltovaXMLツール:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xsd"
version="2.0">
<xsl:param name="l" as="xsd:integer" select="10"/>
<xsl:variable name="regex1" as="xsd:string" select="concat('\w{', $l, ',}')"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/text()">
<xsl:analyze-string select="." regex="{$regex1}">
<xsl:matching-substring>
<span class="space">
<xsl:value-of select="for $ c in string-to-codepoints(.) return codepoints-to-string($c)"
separator=" "/>
</span>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
所属していません StackOverflow