2017-08-28 3 views
0

Unser alter Code verwendet v1.0 xsl. Ich habe gerade aus:XSLT Vorlage Bedingungen

<?xml version="1.0"?> 
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

zu:

<?xml version="1.0"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

Ich versuche, wenn eine der ungültigen Zeichen zu überprüfen, in der Zeichenfolge vorhanden sind mit xsl. Diese

ist, wie mein Code ist es jetzt tun:

. . . 

<xsl:template match="GEN_Limit"> 
    <xsl:if test="string-length(.) &gt; 4">Limit ('<xsl:value-of select="string(.)"/>') - may have up to 4 characters<br/> </xsl:if> 
    <xsl:if test="string-length(.) = 0">Limit is mandatory<br/></xsl:if> 
    <xsl:if test="contains((.),'!') or contains((.),'@') or contains((.),'#') or contains((.),'$') or contains((.),'%') or contains((.),'^') or contains((.),'&amp;') or contains((.),'*') or contains((.),'(') or contains((.),')') or contains((.),'+') or contains((.),'=') or contains((.),'{') or contains((.),'}') or contains((.),'[') or contains((.),']') or contains((.),'|') or contains((.),'\') or contains((.),':') or contains((.),';') or contains((.),'&lt;') or contains((.),'&gt;') or contains((.),'?') or contains((.),'/') or contains((.),',') or contains((.),'.')">Data entered - Limit('<xsl:value-of select="string(.)"/>') may not have special characters <br/> 
    </xsl:if> 
</xsl:template> 

<xsl:template match="GEN_AcctStationNumber"> 
    <xsl:if test="string-length(.) &gt; 6">Accounting Station Number('<xsl:value-of select="string(.)"/>') - may have up to 6 characters 
     <br/> </xsl:if> 
    <xsl:if test="string-length(.) = 0">Accounting Station Number is mandatory<br/></xsl:if> 
    <xsl:if test="string(/Funding/FundsAgency) ='GEN' and not(string(/Funding/FundsFormCode) ='PP')"> 
     <xsl:if test="string(number(string(.))) ='NaN'">Accounting Station Number must be numeric <br/> </xsl:if> 
    </xsl:if> 
    <xsl:if test="contains((.),'!') or contains((.),'@') or contains((.),'#') or contains((.),'$') or contains((.),'%') or contains((.),'^') or contains((.),'&amp;') or contains((.),'*') or contains((.),'(') or contains((.),')') or contains((.),'+') or contains((.),'=') or contains((.),'{') or contains((.),'}') or contains((.),'[') or contains((.),']') or contains((.),'|') or contains((.),'\') or contains((.),':') or contains((.),';') or contains((.),'&lt;') or contains((.),'&gt;') or contains((.),'?') or contains((.),'/') or contains((.),',') or contains((.),'.')">Data entered - Accounting Station Number('<xsl:value-of select="string(.)"/>') may not have special characters <br/> 
    </xsl:if> 
</xsl:template> 

<xsl:template match="GEN_SupAcctClassification"> 
    <xsl:if test="string-length(.) &gt; 6">Supplemental Accounting Classification('<xsl:value-of select="string(.)"/>') - may have up to 6 characters 
     <br/> </xsl:if> 
    <xsl:if test="string-length(.) = 0">Supplemental Accounting Classification is mandatory<br/></xsl:if> 
    <xsl:if test="string(/Funding/FundsAgency) ='GEN' and not(string(/Funding/FundsFormCode) ='PP')"> 
     <xsl:if test="string(number(string(.))) ='NaN'">Supplemental Accounting Classification must be numeric <br/> </xsl:if> 
    </xsl:if> 
    <xsl:if test="contains((.),'!') or contains((.),'@') or contains((.),'#') or contains((.),'$') or contains((.),'%') or contains((.),'^') or contains((.),'&amp;') or contains((.),'*') or contains((.),'(') or contains((.),')') or contains((.),'+') or contains((.),'=') or contains((.),'{') or contains((.),'}') or contains((.),'[') or contains((.),']') or contains((.),'|') or contains((.),'\') or contains((.),':') or contains((.),';') or contains((.),'&lt;') or contains((.),'&gt;') or contains((.),'?') or contains((.),'/') or contains((.),',') or contains((.),'.')">Data entered - Accounting Station Number('<xsl:value-of select="string(.)"/>') may not have special characters <br/> 
    </xsl:if> 
</xsl:template> 

So können Sie sehen, dass contains überall wiederholt wird, in 40 Orten genau zu sein. Gibt es einen besseren Weg, dies zu tun? Wie matches verwendet, vielleicht:

<xsl:variable name="illegalCharacters">! @ # $ %^&amp * () \ + = { } [ | ] \ \ : ; &lt &gt ?/, .</xsl:variable> 

<xsl:if test="matches((.),$illegalCharacters)"></xsl:if> 

Oder sogar erklärt es an der Spitze des xml und macht es da jetzt überall verwendbar, habe ich diesen Code wiederholt auf 40 Plätze für jede Vorlage:/

Beliebig Ideen?

+0

Warum ist Ihre Frage XSLT getaggt 1.0, wenn Sie eine XSLT verwenden 2.0 Prozessor? Wenn nicht, warum sollten Sie die Version des Stylesheets ändern? –

+0

@ michael.hor257k Ich markiere es v1.0, da ich nicht sicher war, wie man von 1.0 zu 2.0 ändert oder wenn ich es richtig gemacht habe – Angelina

+1

Wenn Ihre Frage über XSLT 2.0 ist, dann ist das XSLT 1.0-Tag irrelevant. Für beide Versionen gibt es einfachere Lösungen, aber Regex ist nur in XSLT 2.0 verfügbar. –

Antwort

0

ich mit matches ging

<xsl:if test="not(matches(., '^[a-zA-Z0-9]+$'))"> 
      Data entered - Accounting Station Number('<xsl:value-of select="string(.)"/>') may not have special characters 
</xsl:if> 
1

Ich denke, @version sollte entweder 1,0 oder 2,0 oder eine Variante sein, glaube nicht, dass es eine Version 17

ist

wie für den <xsl:if/> Tag, ich vermute es in einer Vorlage fällt, die einen Knoten übereinstimmt in den Linien von <account-num/>?

die Funktion, ich glaube nicht, dass diese Pars notwendig sind

<xsl:if test="contains((.),'!') or 
      contains(.,'@') or 
      contains(.,'#')"> 
    Data entered - Account Number <xsl:value-of select="string(.)"/> may 
    not have special characters <br/> 
</xsl:if> 
+0

Ich habe die Version erst bemerkt, als du darauf hingewiesen hast :) Danke. Ja, dieser Code ist in jeder Vorlage enthalten. – Angelina

Verwandte Themen