2017-09-12 3 views
-2

Je travaille sur une transformation XSLT de XML en CSV. Comme le XML est énorme, je travaille sur le fait de sauter des nœuds qui correspondent à une entrée dans une liste noire, définie dans la feuille de style. J'utilise Saxon 9 HE comme moteur XSLT, appelé depuis Eclipse. Je reçois un stacktrace comme ceci:XPathException: aucune expression avant le quantificateur - mais je ne trouve pas sa cause

JAXPSAXProcessorInvoker - Syntax error at char 34 in regular expression: No expression before quantifier; SystemID: file:/C:/Users/Public/workspace/TraceToCSV.xsl; Line#: 97; Column#: 31 
; SystemID: file:/C:/Users/Public/workspace/TraceToCSV.xsl; Line#: 97; Column#: 31 
net.sf.saxon.trans.XPathException: Syntax error at char 34 in regular expression: No expression before quantifier 
    at net.sf.saxon.regex.ARegularExpression.<init>(ARegularExpression.java:57) 
    at net.sf.saxon.java.JavaPlatform.compileRegularExpression(JavaPlatform.java:326) 

et l'appel dans ma feuille de style est:

... 
<xsl:when test="$blacklist/entry[matches(text(), $textdata, 'i')]"> 
    <xsl:message> 
     <xsl:text>'</xsl:text> 
     <xsl:value-of select="$textdata" /> 
     <xsl:text>' is blacklisted</xsl:text> 
    </xsl:message> 
</xsl:when> 

où la liste noire $ est définie dans un endroit plus tôt similaire à

<xsl:variable name="blacklist"> 
    <entry>^first expression$</entry> 
    <entry>^second expression$</entry> 
    <entry>^and so on$</entry> 
    <entry>^with some digits \d+$</entry> 
</xsl:variable> 

L'erreur Le message est déroutant car «au caractère 34 dans l'expression régulière» n'a aucun sens car ils sont tous plus courts. La feuille de style élimine un certain nombre d'entrées avant qu'elles ne tombent en panne. Elle doit donc être correcte. Mon seul cependant est qu'il y a un problème avec l'échappement différemment \d+, car c'est la seule regex ayant un quantificateur, mais j'ai déjà essayé avec un double backslash et cela n'a pas aidé.

Des suggestions?

+0

qui n'a fait aucune différence. – Kai

Répondre

0

L'erreur est dans l'appel matches - entrée et le motif étaient dans le mauvais ordre.