2017-01-12 20 views
0

У меня есть атрибут, который я хочу отобразить, но я хочу показать только последнюю часть, обозначенную «-». Я использую подстроку, чтобы сделать это, но это работает только в том случае, если есть один символ. Бывают случаи, когда может быть один и другой, где есть два. Я видел некоторые рекурсивные шаблоны для этого, но я не видел их в каждой строке, как у меня, и я не уверен, где бы я поместил все в свой XSL-документ.Атрибут XSL Display после определенного символа

Вот мой XML документ:

<?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 документ. Я использую XSL 1.0. Результат, который я ищу, я хочу, чтобы это отображалось как «10-миллиметровое сверло - отшлифовать меня», а не «10-миллиметровое фрезерное сверло-фрезерование - отшлифовать меня», и это то, что я получаю сейчас, используя функцию подстроки после или что-то с тот же результат.

<?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

Какой XSLT 1.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> 

Пример вызова: http://xsltransform.net/bFWR5Ew

+0

Как я могу ввести это в свой xsl? –

+0

Я точно не знаю, потому что я его не читал (он слишком длинный). Но в основном вместо '' do 'xsl: call-template', как показано в демонстрации, с' @ oper.jobName' как параметр 'text'. –

+0

Это то, что я видел, когда я исследовал рекурсивные шаблоны с подстрокой, но я продолжал пытаться ввести его в свой код, но я не мог заставить его работать правильно. –

 Смежные вопросы

  • Нет связанных вопросов^_^