XSLT如果不等于字符串

时间:2015-12-04 14:18:49

标签: xslt

我试图比较这些元素的价值。我可以在策略和组元素下找到角色。如果通过policy元素打印出role,我不想在我通过group元素时再次打印它。而是仅在组元素下打印那些之前尚未由策略元素处理和打印的角色。

这就是我接近它的方式,但不知何故NOT运算符无效并打印出group元素下的所有角色:

<xsl:variable name="roleGroup" select="service/group/name" />
<xsl:variable name="rolePolicy" select="service/group/policy/name" />

<xsl:for-each select="service/group/name">
            <xsl:if test="not($roleGroup = $rolePolicy)">
            <xsl:value-of select="."/>
            </xsl:if>            
        </xsl:for-each>

XML结构:

<service>
<group>
<name>Admins</name>
</group>
<group>
<name>Basic users</name>
</group>
</service>

<service>
<group>
<name>Admins</name>
<policy>
<name>Superusers</name>
</policy>
<policy>
<name>Support</name>
</policy>
</group>
</service>

输出如下:

Group; Role Thru Policy
Admins; Superusers
Admins; Support
Admins;
Basic users;

但我希望这样,没有第二个管理员组:

Group; Role Thru Polic
Admins; Superusers
Admins; Support
Basic users;

因为Admins组已在输出中。

如果有人能告诉我问题在哪里,我感激不尽。感谢。

1 个答案:

答案 0 :(得分:0)

你说“如果通过政策要素打印出角色,我不想在我处理群组元素时再次打印它。”

但是你的条件test="not($roleGroup = $rolePolicy)"仅取决于在循环中声明 的两个变量 - 如果循环的任何迭代都是真的,那么每次迭代都会成立。

由于我看不到您的源XML,我无法告诉您具体情况应该是什么,但我猜是test="not(. = $rolePolicy)"

<强> POSTSCRIPT

坦率地说,我觉得有点令人沮丧,指出你的错误不足以让你修复它。我非常不愿意为那些明显不太懂语言的人编写代码,以便理解代码的工作原理,我强烈建议你在进行更多编码之前需要做更多的阅读。但与此同时,试试这个:

<xsl:variable name="rolePolicy" select="service/group/policy/name" />

<xsl:for-each select="service/group/name[not(. = $rolePolicy)]">
    <xsl:value-of select="."/>            
</xsl:for-each>