Visual Studio 2010でXSLを使用しています。次の * XSL * ファイルがあり、関数を使用して文字列を分割しようとしています:tokenize()
<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/>
<xsl:template match='/'>
<html>
<head> </head>
<body>
<ul>
<xsl:apply-templates select="response/result/doc"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="doc">
<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="features" select="tokenize(str[@name='Desc'],';')"/>
<li>
<xsl:value-of select="$title"/>
<ul>
<xsl:for-each select="$features">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
注:この時点で、実際にXSLT バージョン 2.0を使用しているかどうかはわかりません。最初の行に設定したからだと思います。
上記のXSLに対して、 Visual Studio 2010で次のエラーが発生します。
'tokenize()' is an unknown XSLT function.
次の入力XMLファイルがあります。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result name="response" numFound="10000" start="0">
<doc>
<str name="Title">Title 1</str>
<str name="Desc">Feature 1; Feature 2; Feature 3;</str>
</doc>
<doc>
<str name="Title">Title 2</str>
<str name="Desc">Feature 1; Feature 2; Feature 3;</str>
</doc>
</result>
</response>
理想的には、以下のHTMLファイルのような出力が必要です。
<html>
<head> </head>
<body>
<ul>
<li>Title 1
<ul>
<li>Feature 1</li>
<li>Feature 2</li>
<li>Feature 3</li>
</ul>
</li>
<li>Title 2
<ul>
<li>Feature 1</li>
<li>Feature 2</li>
<li>Feature 3</li>
</ul>
</li>
</ul>
</body>
</html>
XMLファイルでtokenize()
文字列Descを分割するにはどうすればよいですか? この空白は無視してください。つまり、出力ファイルはHTMLであるため、出力ファイルの前後に余分なスペースがあっても意味がありません。