XSLT错误产生了“模棱两可的规则匹配". [英] XSLT Error produced "Ambiguous rule match"

查看:60
本文介绍了XSLT错误产生了“模棱两可的规则匹配".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对两种情况进行匹配:

I am trying to do a match for two scenarios:

  1. 字符串包含的字符不只是数字
  2. 字符串包含8个以上的字符.

所以XSLT是:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="record[translate(employeeNumber, 'abcdefghijklmnopqrstuvwxyzABCDEFGHILKLMNOIPQRSTUVWXYZ!£$%^', '')]"/>
    <xsl:template match="record[string-length(employeeNumber) &lt; 9]"/>
</xsl:stylesheet>

测试数据为:

<?xml version="1.0" encoding="UTF-8"?>
<request>
    <records>
        <record>
            <employeeNumber>12345678</employeeNumber>
        </record>
        <record>
            <employeeNumber>1234567A</employeeNumber>
        </record>
        <record>
            <employeeNumber>12345678A</employeeNumber>
        </record>
        <record>
            <employeeNumber>123456789</employeeNumber>
        </record>
    </records>
</request>

这应该返回:

<?xml version="1.0" encoding="UTF-8"?>
<request>
    <records>
        <record>
            <employeeNumber>1234567A</employeeNumber>
        </record>
        <record>
            <employeeNumber>12345678A</employeeNumber>
        </record>
        <record>
            <employeeNumber>123456789</employeeNumber>
        </record>
    </records>
</request>

但是正如我在氧气中所说的那样,我得到了错误:

However as i said in Oxygen i am getting the error:

Severity: warning Description: Ambiguous rule match for /request[1]/records[1]/record[1] Matches both "record[string-length(employeeNumber) < 9]" on line 13 of file:/C:/Users/mdown/Desktop/Untitled21.xsl and "record[translate(employeeNumber, 'abcdefghijklmnopqrstuvwxyzABCDEFGHILKLMNOIPQRSTUVWXYZ!£$%^', '')]" on line 12 of file:/C:/Users/mdown/Desktop/Untitled21.xsl

Severity: warning Description: Ambiguous rule match for /request[1]/records[1]/record[1] Matches both "record[string-length(employeeNumber) < 9]" on line 13 of file:/C:/Users/mdown/Desktop/Untitled21.xsl and "record[translate(employeeNumber, 'abcdefghijklmnopqrstuvwxyzABCDEFGHILKLMNOIPQRSTUVWXYZ!£$%^', '')]" on line 12 of file:/C:/Users/mdown/Desktop/Untitled21.xsl

这样做的原因是因为它同时匹配两个规则,但这应该不是问题.我将如何更改XSLT以支持这些选项.

The reason for this is because it is matching both rules, however this should not be a problem. How would i alter the XSLT to support these options.

推荐答案

在我看来,您似乎正在得到警告,而不是错误.如果您想避免出现警告,请决定哪个模板应具有更高的优先级,并设置该优先级,例如<xsl:template match="foo" priority="5"/>根据需要.

It looks to me as if you are getting a warning, not an error. If you want to avoid the warning then decide which template should have higher priority and set that e.g. <xsl:template match="foo" priority="5"/> as needed.

这篇关于XSLT错误产生了“模棱两可的规则匹配".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆