XSLT了解变量中的重复匹配

时间:2013-10-29 05:20:46

标签: xslt

我只是在下面的代码

中理解变量中重复匹配的概念
<xsl:param name="privileges" as="node()" select="doc('privileges.xml')"/>

<xsl:variable name="codeps" select="$privileges//privilege[matches(.,  ':[0-9]+$')]/substring-after(., ':')"/>

previleges.xml正在进行以下编码:

<privileges>
            <privilege>Access my notices</privilege>
            <privilege>Access draft notices</privilege>
            <privilege>Place notice</privilege>
            <privilege>Access published notices</privilege>
            <privilege>Place notice of type:2903</privilege>
            <privilege>Place notice of type:2413</privilege>
            <privilege>Place notice of type:2803</privilege>
            <privilege>Access pending notices</privilege>
            <privilege>Access my account</privilege>
            <privilege>Place legacy notice</privilege>
            <privilege>Access my searches</privilege>
            <privilege>Place notice of type:1101</privilege>
             <privilege>Place notice of type:2404</privilege>
            <privilege>Place notice of type:2402</privilege> 
            <privilege>Place notice of type:2501</privilege>
            <privilege>Place notice of type:2505</privilege>
            <privilege>Place notice of type:9900</privilege>
</privileges>

这里,在下面的条件下,它是逐个匹配的。

<xsl:if test="//*[@code = $codeps]">

我的疑问是,如何在不使用for-each的情况下逐个匹配或每个值匹配。我使用它,它运作良好,但我仍然无法理解。如果假设,我打印$ codeps的值,那么,它会在执行匹配时打印累计值,例如2903 2413 2803等,然后,它会完全匹配。

请帮助我理解HOW

1 个答案:

答案 0 :(得分:2)

很简单:当一个(或两个)操作数是序列(节点集)时,=将左侧的所有值与右侧的所有值进行比较

这有点像SQL中的内部联接。找到匹配的值对后,表达式的计算结果为true

请注意,此操作的反面不是{​​{1}},而是x != y

严格来说,在XPath 2.0 中,所有都是一个序列。简单值是由单个元素组成的序列。这里,无论每个操作数具有多少元素,上述描述都适合。在XPath 1.0中,序列不存在,但not(x = y)的行为方式仍然相同。