我必须将一组节点与另一组节点匹配,以查看缺少哪一组节点。当它丢失时,我需要显示丢失节点的名称。只能使用 XSLv1.0。
.XML:
<root>
<ph>
<wb>full_list</wb>
<wbs>
<categories>
<rule>
<name>Intimate Clothing</name>
<value>95</value>
<allow/>
<log>true</log>
</rule>
<rule>
<name>Books</name>
<value>825</value>
<allow/>
<log>true</log>
</rule>
<rule>
<name>Violence</name>
<value>93</value>
<allow/>
<log>true</log>
</rule>
</categories>
</wbs>
</ph>
... hundreds of lines later ...
<ph>
<wb>items</wb>
<wbs>
<categories>
<rule>
<value>93</value>
<allow/>
<log>true</log>
</rule>
<rule>
<value>95</value>
<allow/>
<log>true</log>
</rule>
</categories>
</wbs>
</ph>
</root>
期望的结果:
Books
<--因为"书籍"是两组节点中缺少的(或值"825")。
我拥有的 XSL:
<xsl:variable name="ph" select="root/ph"/>
<xsl:for-each select="$ph[wb = 'full_list']/wbs/categories/rule[value != $ph[wb = 'items']/wbs/categories/rule/value]">
<xsl:value-of select="name"/>
</xsl:for-each>
但这最终只会显示full_list
上的每一个<name>
。它应该只显示"书籍"。我做错了什么?
您的方法不起作用的原因是您使用的是node[child!=node-set]
而不是node[not(child=node-set)]
。第一个构造表示"每个节点至少有一个与节点集的某个成员不匹配的子节点";第二个说"每个没有子节点的节点都与节点集的任何成员匹配"。
我重复我的建议,使用密钥,它在查找"相关"项目时更有效。