XSL - jak ustalić żeby variable było integer

0

IMPUT:

<?xml version="1.0" encoding="UTF-8"?>
<LeveL Plan="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">


<space2000>
<values>
<value jak="77" rak="12"</value>
<value jak="66" rak="345"></value>
<value jak="-50" rak="67"></value>
<value jak="-30" rak="-89">1</value>
</values> 

</space2000>


</LeveL>

wstępnie próbowałem tak:

<xsl:variable name="JJJ"  select="(format-number(((value/@jak) div 2),'0'))"/>
<xsl:variable name="RRR"  select="format-number(((value/@rak) div 2),'0')"/>
<xsl:text>
O
</xsl:text>
<xsl:text>LA</xsl:text>
<xsl:value-of select="$JJJ"></xsl:value-of>
<xsl:text> </xsl:text><xsl:text>LO</xsl:text>
<xsl:value-of select="$RRR"></xsl:value-of>
<xsl:text>
O
</xsl:text>

<xsl:choose>
     <xsl:when test="( $JJJ > '0')">
        <xsl:value-of select="A"/>
     </xsl:when>
     <xsl:when test="( $JJJ < '0')">
        <xsl:value-of select="B"/>
     </xsl:when>
       <xsl:when test="( $RRR > '0')">
        <xsl:value-of select="C"/>
     </xsl:when>
     <xsl:when test="( $RRR < '0')">
        <xsl:value-of select="D"/>
     </xsl:when>   
     <xsl:when test="( ( $RRR + '50') < '0' )">
        <xsl:value-of select="X"/>
     </xsl:when>
     <xsl:when test="( '-100' < ( $RRR + '1') < '100' )">
        <xsl:value-of select="X"/>
     </xsl:when>


</xsl:choose>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

chciałbym żeby wyświeliły mi się w trybie textowym jakoś : A C B X Y
ale

XPTY0004 : The operator ' + ' is not defined for operands of type xs:string and xs:integer

nie wierzy mi że to jest integer i nie chce dodawać
i nie wiem jak zrobić w przedziale od do - też mu sie coś nie podoba

ma ktoś jakąś podpowiedź dla mie? heeeeeeeeeeeeeelp :)

1

Na moje oko wygląda to tak:

  1. apostrofy wokół liczb do wywalenia
  2. znaki < i > są zabronione do porównywania. Użyj < i >
  3. jeżeli chcesz sprawdzić czy coś mieści się w przedziale, to będzie to mniej więcej tak:
<xsl:when test="-100 &lt; ( $RRR + 1) and ( $RRR + 1) &lt; 100 )">

Jakiego toola używasz do transformat xslt?

0

thanx - Spy'a

tylko czy jest jakaś opcja żeby narzucić zmiennej żeby uznawała coś za integer ............../?

1

XSLT samo rozpoznaje typ wartości dynamicznie - jeżeli wartość jest obliczalna, nie ma problemu, jeżeli jest nieobliczalna, zwróci NaN.

Metoda format-number() zwraca sformatowanego stringa z podanej liczby. O ile string dalej "wyglada" jak liczba, będzie można na nim wykonać obliczenia.

Jeżeli chodzi o padding, użycie format-number(wartość, '00') zapewni że dla cyfr pomiędzy -10 i 10 będziesz miał zero na początku.

Wyślij proszę cały kod xslt, który obecnie masz zaimplementowany + pełny error. Wygląda mi na to że błąd nie leży tam gdzie sądzisz, tylko w innym miejscu: value/@JAK - jeżeli ścieżka do tego elementu jest niepoprawna, to jakiekolwiek działanie na zmiennej $JJJ zwróci Ci NaN. Później, gdy będziesz próbował wykonać działanie $RRR + 50, będzie to wyewaluowane do NaN + 50 i stąd ten błąd, ale musiałbym mieć cały plik xslt żeby to potwierdzić :)

0

<xsl:variable name="jajo" select = "format-number(.....)" as="xs:string"/>

i wtedy jest ok

1 użytkowników online, w tym zalogowanych: 0, gości: 1