使用模板参数在元素查找中使用的属性值失败但是本地定义的字符串变量是好的 - 为什么?

时间:2011-07-22 07:28:42

标签: xml xslt

我需要确定是否存在名称属性设置为某个值的元素。我需要搜索的文档不是应用样式表的文档。我希望传递字符串值以搜索模板的参数。当我这样做时查找失败但是当我在模板中创建局部变量并在查找谓词中使用该变量时成功。我不明白为什么。

我尝试过两个不同的xsl引擎,两者都表现出相同的行为。

模板如下所示。我希望找到一个name属性等于“__”之前的字符的信号元素。

第一个失败,但第二个失败,要在模板中给出要搜索的字符串成功。为什么呢?

    <xsl:template name="portIsSigObjOrQuality">
    <xsl:param name="portName" />

    <xsl:variable name="nameOfCompoundInstanceFromPort"
     select="substring-before($portName,'__')" />

  <xsl:choose>
     <xsl:when
        test="$signalLookupDoc/signals/signal[./@name=$nameOfCompoundInstanceFromPort]">
        <xsl:text>yes</xsl:text>
     </xsl:when>
     <xsl:otherwise>
        <xsl:text>no</xsl:text>
     </xsl:otherwise>
  </xsl:choose>

    <xsl:variable name="nameOfCompoundInstanceFromString"
        select="substring-before('EssBypassValveAM__sdfsdf', '__')" />

    <xsl:choose>
        <xsl:when
            test="$signalLookupDoc/signals/signal[./@name=$nameOfCompoundInstanceFromString]">
            <xsl:text>yes</xsl:text>
        </xsl:when>
        <xsl:otherwise>
            <xsl:text>no</xsl:text>
        </xsl:otherwise>
    </xsl:choose>
    <xsl:text>;&#10;</xsl:text>

</xsl:template>

signalLookupDoc is defined as
<xsl:variable name="signalLookupDoc" select="document($param2)" />

并且模板被称为

<xsl:call-template name="portIsSigObjOrQuality">
            <xsl:with-param name="portName" select="'EssByPassValveAM__Enabled'" />
        </xsl:call-template>

任何人都可以向我解释为什么第一次查找失败以及我要做些什么来使它工作?

1 个答案:

答案 0 :(得分:2)

我猜大写字母的区别(区分大小写的匹配)?

EssBypassValveAM

EssByPassValveAM

注意P vs p。