2017-05-02 2 views
0

로마 숫자를 정수로 변환 할 수있는 함수가 있나요? 예를 들어 로마 숫자로 정수를 변경할 수 있습니다. 내가 로마 숫자를 정수로 변환하려고합니다. 기능이 없다면 템플릿에서 이것을 처리해야합니다.xslt를 사용하여 로마 숫자를 정수로 변환

+0

로마는 당신이 당신의 자신의 간단한 기능을 추가 할 수 있습니다, 아주 간단한 기능입니다? – didiz

답변

0

필자는이 함수를 작성하여 처리했지만, (VII 또는 IVII는 같음) 입력 값의 유효성을 검증하지 못하고 출력이 정확하지 않은 문제가 있습니다. 정수

XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   
    xmlns:number="http://dummy" version="2.0" > 

    <xsl:output method="text"/> 

    <xsl:template match="/"> 
     (<xsl:value-of select="number:RomanToInteger('MMXVII', 0)"/>) 
    </xsl:template> 

    <xsl:function name="number:RomanToInteger"> 
     <xsl:param name="romannumber"/> 
     <xsl:param name="followingvalue"/> 
     <xsl:choose> 
      <xsl:when test="ends-with($romannumber,'CM')"> 
       <xsl:value-of select="900 + number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-2), 900)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'M')"> 
       <xsl:value-of select="1000+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 1000)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'CD')"> 
       <xsl:value-of select="400+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-2), 400)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'D')"> 
       <xsl:value-of select="500+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 500)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'XC')"> 
       <xsl:value-of select="90+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-2), 90)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'C')"> 
       <xsl:value-of select="(if(100 ge number($followingvalue)) then 100 else -100)+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 100)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'XL')"> 
       <xsl:value-of select="40+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-2), 40)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'L')"> 
       <xsl:value-of select="50+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 50)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'IX')"> 
       <xsl:value-of select="9+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-2), 9)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'X')"> 
       <xsl:value-of select="(if(10 ge number($followingvalue)) then 10 else -10) + number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 10)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'IV')"> 
       <xsl:value-of select="4+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-2), 4)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'V')"> 
       <xsl:value-of select="5+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 5)"/> 
      </xsl:when> 
      <xsl:when test="ends-with($romannumber,'I')"> 
       <xsl:value-of select="(if(1 ge number($followingvalue)) then 1 else -1)+ number:RomanToInteger(substring($romannumber,1,string-length($romannumber)-1), 1)"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="0"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:function> 

</xsl:stylesheet> 
관련 문제