XSLT 1.0-获取不在第二组中的值集



给定两个数据集(假设它们是有效的节点集(:

$first

<values>
  <value id="1"/>
  <value id="2"/>
  <value id="3"/>
</values>

$second

<values>
  <value id="3"/>
  <value id="4"/>
  <value id="5"/>
</values>

我是否能够在XSLT中构造XPath,以从$second中不存在的<value/>中精确选择CC_3节点?

我最接近的是,肯定的是

$first/value[not(@id = $second/value/@id)]

但是,这显然是不正确的。我的下一个想法是:

$first/value[not($second/value[@id = current()/@id])]

也明显不正确,因为current()引用上下文节点,而不是当前value节点。

是否有单行方法不需要丑陋的字符串操纵来制作此过滤器?是否有更好的通用XSLT解决方案?

谢谢

我不确定您的问题是什么。使用此输入:

<xml>
    <first>
        <values>
          <value id="1"/>
          <value id="2"/>
          <value id="3"/>
        </values>
    </first>
    <second>
        <values>
          <value id="3"/>
          <value id="4"/>
          <value id="5"/>
        </values>
    </second>
</xml>

此样式表

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />
    <xsl:variable name="first" select="/*/first/values" />
    <xsl:variable name="second" select="/*/second/values" />
    <xsl:template match="/">
        <output>
            <same>
                <xsl:copy-of select="$first/value[@id = $second/value/@id]" />
            </same>
            <different>
                <xsl:copy-of select="$first/value[not(@id = $second/value/@id)]" />
            </different>
        </output>
    </xsl:template>
</xsl:transform>

给出

<output>
   <same>
      <value id="3"/>
   </same>
   <different>
      <value id="1"/>
      <value id="2"/>
   </different>
</output>

完全按照您的意愿,完全使用了您一直在使用的代码。

相关内容

  • 没有找到相关文章

最新更新