2017-01-12 1 views
0

속성을 표시하고 싶지만 "-"로 표시된 마지막 부분 만 표시하고 싶습니다. 이 작업을 수행하는 데 substring-after를 사용하고 있지만 한 문자가있는 경우에만 작동합니다. 거기에 하나가있을 수도 있고 두 개가있을 수도 있습니다. 여기에 재귀 적 템플릿이 몇 가지 있습니다 만, For-each 루프에서 보지 못했습니다. 여기에 모든 것을 넣을 곳이 확실하지 않습니다.특정 문자 뒤의 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"으로 표시되기를 바라고 있습니다. 이제는 substring-after function 또는 무언가를 사용하고 있습니다. 같은 결과.

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

당신이 http://xsltransform.net/bFWR5Ew을 사용하는 것 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> 

예 :

+0

내 xsl에서 어떻게 입력합니까? –

+0

정확하게 읽지 못했기 때문에 (너무 길다) 나는 정확하게 모른다. 그러나 기본적으로, 데모에서와 같이'''xsl : call- oper.jobName'을'text' 매개 변수로 사용하십시오. –

+0

이것은 서브 루틴과 함께 재귀 템플릿을 연구했을 때 보았던 것이지만 내 코드에 입력하려고 시도했지만 계속 제대로 작동하지 못했습니다. –