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(.) > 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((.),'&') 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((.),'<') or contains((.),'>') 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(.) > 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((.),'&') 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((.),'<') or contains((.),'>') 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(.) > 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((.),'&') 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((.),'<') or contains((.),'>') 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">! @ # $ %^& * () \ + = { } [ | ] \ \ : ; < > ?/, .</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?
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? –
@ 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
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. –