我必须将一组节点与另一组节点相匹配,以查看哪一个节点丢失。当它丢失时,我需要显示缺失节点的名称。只能使用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
&lt; - 因为“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>
但这最终会显示<name>
上的每个full_list
。它应该只显示“书籍”。我做错了什么?
答案 0 :(得分:1)
您的方法不起作用的原因是您使用的是node[child!=node-set]
而不是node[not(child=node-set)]
。第一个结构说“每个节点至少有一个子节点与某些节点集成员”不匹配;第二个说“每个没有孩子的节点匹配任何节点集成员”。
我重复建议使用密钥,这样可以更有效地找到“相关”项目。