変数があるとします。 <wish>Hi jony</wish>
私はwish要素を横断しなければならず、要素内の文字列の最初の文字のリンクを作成する必要があります。 出力は、私は、これはあなたがのために行くているものだと思います<a href="#H">H</a> <a href="#j">j</a>.
xsltの文章で各文字列の最初の文字のリンクを作成する方法は?
0
+0
A
答えて
0
次のようになります。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="wish">
<xsl:copy>
<xsl:call-template name="link-first-letters">
<xsl:with-param name="text" select="."/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="link-first-letters">
<xsl:param name="text"/>
<xsl:variable name="first-letter" select="substring($text, 1, 1)"/>
<a href="#{$first-letter}"><xsl:value-of select="$first-letter"/></a>
<xsl:if test="contains($text, ' ')">
<xsl:text> </xsl:text>
<xsl:call-template name="link-first-letters">
<xsl:with-param name="text" select="substring-after($text, ' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
応用この入力文書
<?xml version="1.0"?>
<root>
<wish>Hi jony</wish>
</root>
には、次の出力を生成します。
<root>
<wish><a href="#H">H</a> <a href="#j">j</a></wish>
</root>
0
文字列を分割するには再帰的テンプレートが必要です。次にb要素を追加します。適用できるテンプレートは次のとおりです。
<xsl:template match="Wish">
<xsl:call-template name="links">
<xsl:with-param name="text" select="." />
</xsl:call-template>
</xsl:template>
<xsl:template name="links">
<xsl:param name="text" />
<xsl:variable name="newtext" select="concat(normalize-space($text), ' ')" />
<xsl:variable name="first" select="substring-before($newtext, ' ')" />
<xsl:variable name="remaining" select="normalize-space(substring-after($newtext, ' '))" />
<xsl:element name="a">
<xsl:attribute name="href">#<xsl:value-of select="substring($first, 1, 1)"/></xsl:attribute>
<xsl:value-of select="substring($first, 1, 1)"/>
</xsl:element>
<xsl:if test="$remaining != ''">
<xsl:call-template name="links">
<xsl:with-param name="text" select="$remaining" />
</xsl:call-template>
</xsl:if>
</xsl:template>
0
あなたは正しい道を歩いています。クリーンアップと、それは次のようになり簡素化:トークン化の使用に基づいて
<xsl:for-each select="tokenize($keyword,' ')">
<xsl:variable name="letter" select="substring(.,1,1)"/>
<a href="{concat('#',$letter)}">
<xsl:value-of select="$letter"/>
</a>
</xsl:for-each>
、私はあなたがハーポの再帰的なソリューションを不要にするXSLT 2.0を使用していると仮定しています。
0
このXSLT 2.0変換:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="wish">
<xsl:for-each select="tokenize(., '\W+')">
<xsl:variable name="vFirst" select="substring(.,1,1)"/>
<a href="#{$vFirst}"><xsl:value-of select="$vFirst"/></a>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
提供されるXML文書に適用される:
<a href="#H">H</a>
<a href="#j">j</a>
:
<wish>Hi jony</wish>
募集結果を生成します
注記:concat()
の使用は必要ありません。
関連する問題
- 1. 文章中の文字列の最初の文字を大文字にする方法は?
- 2. 文章の最初の文字を大文字にするCSS
- 3. 文字列の最初の文字をxsltの大文字に変換する
- 4. 各文の最初の文字を大文字にする方法
- 5. 各単語の最初の文字、または文字列全体の最初の文字をC#で大文字にする方法は?
- 6. 文章から各単語の最初の文字を抽出する
- 7. 小文字小文字xslt 1.0のみを使用している文字列の最初の文字
- 8. 文字列を反転した後に各単語の最初の文字を大文字にする方法
- 9. 文字列の各文の最初の文字を返します
- 10. XSLT URL文字列の最後の文字を削除する
- 11. SQLで文字列の最初の文字を取得する方法は?
- 12. javascriptで最初の文字の文字列をチェックする方法は?
- 13. は、文字列の最初の文字を削除し、私はこの文字列の最初の文字を取得する必要があり、文字列
- 14. 文字列の文字列をJavaの最初の数字文字まで
- 15. AngularJSで各文の最初の文字を大文字にする
- 16. Cでn文字の文字列を作成する最も速い方法
- 17. TTSは文章の最初の文字を無作為にスキップします
- 18. リンクリストの文字列から最初の文字を取得する方法は?
- 19. Shellの文字列から最初の文字を抽出する方法は?
- 20. 文字列内の各文字の最初の一致を一致させる
- 21. 文字列の最初の文字を削除するには?
- 22. 文字列の最初の文字の大文字/小文字の決定
- 23. 文字列の最初の文字を確認する方法は大文字です
- 24. Pythonで文字列の最初の文字を大文字に変更する
- 25. 最初の文字が文字であるまで文字列から文字列を削除するには?
- 26. varcharの最初の文字は文字列ですか?
- 27. スウィフトは、文字列の各単語の最初の文字を大文字にします。
- 28. Pythonの文字列の最初の文字のみを大文字にする
- 29. 最初の列の大文字小文字は、bashでのみ
- 30. xslt文字列内の特殊文字