在 XSL 中匹配和显示缺少的节点



我必须将一组节点与另一组节点匹配,以查看缺少哪一组节点。当它丢失时,我需要显示丢失节点的名称。只能使用 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)]。第一个构造表示"每个节点至少有一个与节点集的某个成员不匹配的子节点";第二个说"每个没有子节点的节点都与节点集的任何成员匹配"。

我重复我的建议,使用密钥,它在查找"相关"项目时更有效。

相关内容

  • 没有找到相关文章

最新更新