我正在检查XML文件中@id属性中是否存在字符串。我不关心这种情况,只是字符串的字母匹配。因此"myid_5"
可以等于"mYiD_5"
,"MYID_5"
等等。我正在使用<xsl:key>
和key()
,显然我不能使用带有键的lower-case()
函数来规范化密钥找到的@id。我可以吗?或类似的东西?
XML文件示例(下面为$lookup-file
):
<root>
<p id="A41_YrlyDedHdr">Blah</p>
<p id="A42_YrlyDed15">Blah</p>
</root>
$lookup-file
的关键:
<xsl:key name="p-id" match="/root/p" use="@id"/>
模板:
<xsl:template match="fig">
<xsl:variable name="id" select="lower-case(@id)"/>
<xsl:choose>
<!-- ?? Can force to lowercase below?? -->
<xsl:when test="exists(key('p-id', $id, $lookup-file))">
<!-- do something with <fig> -->
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
似乎键上的排序规则可能会使其不区分大小写,但我不知道要使用哪种排序规则。
答案 0 :(得分:1)
显然我不能使用带有键的小写()函数
为什么不呢?您可以将密钥定义为:
<xsl:key name="p-id" match="/root/p" use="lower-case(@id)"/>
然后将其用作:
<xsl:when test="exists(key('p-id', lower-case(@id), $lookup-file))">
似乎键上的排序规则可能会使其不区分大小写
这是一个有趣的想法,但我相信实现将依赖于处理器。所以在撒克逊你可以做到:
<xsl:key name="p-id" match="/root/p" use="@id" collation="http://saxon.sf.net/collation?ignore-case=yes"/>