我只是想在下面的代码中理解变量中重复匹配的概念
<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]">我的疑问是,它是如何匹配一个或每一个价值,而不使用-每个。我用过这个,它很好用,但是,我仍然无法理解。如果假设我打印$codeps的值,然后在执行匹配时打印累积值,例如290324132803等,那么它就完全匹配了。
请帮助我理解HOW
发布于 2013-10-29 06:09:32
这很简单:当一个操作数(或两个操作数)是序列(节点集)时,=将左侧的所有值与右侧的所有值进行比较。
这有点像SQL中的内部联接。找到匹配的一对值后,表达式的计算结果为true。
注意,与此操作相反的不是x != y,而是not(x = y)。
严格地说,在XPath 2.0中,一切都是序列。简单值是由单个元素组成的序列。在这里,不管每个操作数有多少元素,上面的描述都适用。在XPath 1.0中,序列不存在,但=的行为仍然相同。
https://stackoverflow.com/questions/19650259
复制相似问题