我正在进行从XML到CSV的XSLT转换。由于XML非常庞大,我正在跳过与样式表中定义的黑名单中的条目相匹配的节点。 我使用Saxon 9 HE作为XSLT引擎,在Eclipse中调用。 我收到这样的堆栈跟踪:
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)
我的样式表中的调用是:
...
<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>
其中$ blacklist定义在类似于
的早期位置<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>
错误信息令人困惑,因为“正则表达式中的char 34”没有任何意义,因为它们都更短。
样式表在失败之前过滤掉了相当多的条目,所以它基本上是正确的。我唯一的问题是转换\d+
的问题有所不同,因为这是唯一一个有量词的正则表达式,但我已经尝试过双反斜杠而且没有帮助。
有什么建议吗?