我只是在下面的代码
中理解变量中重复匹配的概念<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
?
答案 0 :(得分:2)
很简单:当一个(或两个)操作数是序列(节点集)时,=
将左侧的所有值与右侧的所有值进行比较
这有点像SQL中的内部联接。找到匹配的值对后,表达式的计算结果为true
。
请注意,此操作的反面不是{{1}},而是x != y
。
严格来说,在XPath 2.0 中,所有都是一个序列。简单值是由单个元素组成的序列。这里,无论每个操作数具有多少元素,上述描述都适合。在XPath 1.0中,序列不存在,但not(x = y)
的行为方式仍然相同。