XPathException:量词之前没有表达式 - 但我找不到它的原因

时间:2017-09-12 07:00:19

标签: regex xml xslt xpath saxon

我正在进行从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+的问题有所不同,因为这是唯一一个有量词的正则表达式,但我已经尝试过双反斜杠而且没有帮助。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

错误发生在matches调用中 - 输入和模式的顺序错误。