2017-01-12 13 views
0

私は表示したい属性を持っていますが、 " - "で示される最後の部分のみを表示したいとします。私はこれを行うにはsubstring-afterを使用していますが、これは1つの文字がある場合のみ動作します。場合によっては2つの場合があります。私はこのためのいくつかの再帰的なテンプレートを見てきましたが、私はここでそれを持っているように、For-eachループでそれらを見ていないと私は私のXSLドキュメント内のすべてを置くだろうか分からない。特定の文字の後のXSL表示属性

<?xml version="1.0" encoding="UTF-8"?> 
<JobList> 
<Job T.number="28" /> 
<Job T.identifier="10mm Drill" /> 
<Job oper.jobName="2: T28-Contour Milling - Grind me back" />     
<Job T.number="3" />         
<Job T.identifier="9mm Drill" />     
<Job oper.jobName="3: T3 Contour Milling" /> 
</JobList> 

はここに私のXSLドキュメントです:

は、ここに私のXML文書です。私はXSL 1.0を使用しています。私が探している結果は、「10mm Drill-Grind me back」ではなく、「10mm Drill-Contour Milling - Grind me back」ではなく、同じ結果。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" encoding="UTF-8" method="xml" /> 
<xsl:param name="REPORT">joblist</xsl:param> 
<xsl:param name="LOCALE">en-GB</xsl:param> 
<xsl:param name="FORMAT">html</xsl:param> 
<xsl:template match="/"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<title>Tool Report</title> 
</head> 
<body> 
<xsl:apply-templates /> 
</body> 
</html> 
</xsl:template> 
<xsl:template match="JobList"> 
<div style="font-size:;"> 
<table width="100%" style="margin-bottom:50px;font:bold 10px arial;"> 
<thead> 
<tr> 
<th style="text-align:center;font-family:Arial;font-size:13;font:bold 7px arial;"> 
<xsl:value-of select="@month"> 
</xsl:value-of> 
<span>.</span> 
<xsl:value-of select="@day"> 
</xsl:value-of> 
<span>.</span> 
<xsl:value-of select="@year"> 
</xsl:value-of> 
</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td style="text-align:center;font:normal 7px arial;font-size:12px;"> 
<xsl:value-of select="//Job[position()=1]/@cfg.JOBLISTNAME" /> 
<span> 
</span> 
<span> 
</span> 
</td> 
</tr> 
</tbody> 
<table width="100%" border="1" style="margin-bottom:50px;font:13px arial;"> 
<thead style="font:19;"> 
<tr style="font-size:19;"> 
<td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
      <td style="text-align:center;font-weight:bold;font-size:19;"> 
      </td> 
     </tr> 
     </thead> 
     <tbody style="font-size:19;"> 
     <xsl:for-each select="//Job[not(@T.number=preceding::Job/@T.number)]"> 
      <tr style="font-size:19;"> 
      <td style="font-size:19;"> 
       <xsl:value-of select="@T.number" /> 
      </td> 
      <td> 
      </td> 
      <td style="font-size:19;"> 
       <xsl:value-of select="@T.identifier" /> 
       <xsl:choose> 
       <xsl:when test="contains(@T.toolComment3, 'GRIND') or contains(@T.toolComment3, 'Grind')"> 
        <xsl:value-of select="@T.toolComment3" /> 
       </xsl:when> 
       </xsl:choose> 
       <xsl:choose> 
       <xsl:when test="contains(@T.comment2, 'GRIND') or contains(@T.comment2, 'Grind')"> 
        <xsl:value-of select="@T.comment2" /> 
       </xsl:when> 
       </xsl:choose> 
       <xsl:choose> 
       <xsl:when test="contains(@oper.jobName, 'GRIND') or contains(@oper.jobName, 'Grind')"> 
        <xsl:value-of select="substring-after(@oper.jobName, '-')" /> 
       </xsl:when> 
       </xsl:choose> 
      </td> 
      </tr> 
     </xsl:for-each> 
     </tbody> 
    </table> 
    </table> 
</div> 
</xsl:template> 
</xsl:stylesheet> 
+0

? –

+0

Microsoft MSXML –

答えて

0

名前付き再帰テンプレートを使用して、テキスト文字列の最後のトークンを取得します。

<xsl:template name="last-token"> 
    <xsl:param name="text"/> 
    <xsl:param name="delimiter" select="'-'"/> 
    <xsl:choose> 
     <xsl:when test="contains($text, $delimiter)"> 
      <!-- recursive call --> 
      <xsl:call-template name="last-token"> 
       <xsl:with-param name="text" select="substring-after($text, $delimiter)"/> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$text"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

コールの例:あなたが1.0プロセッサを使用するXSLT http://xsltransform.net/bFWR5Ew

+0

これを私のxslにどのように入力すればよいですか? –

+0

私はそれを読んでいないので、正確にはわかりません(それは長すぎます)。しかし、基本的に、デモに示されているように '' 'xsl:call-template'を実行するのではなく、' @ oper.jobName'を 'text'パラメータとして使用します。 –

+0

これは、再帰的なテンプレートをsubstring-afterで調べたときに見たものですが、コード内に入力しようとしていましたが、正しく動作するようにはできませんでした。 –

関連する問題