代码之家  ›  专栏  ›  技术社区  ›  testing123

XSL:如何基于单独的XML元素限制select-in-apply模板

  •  1
  • testing123  · 技术社区  · 15 年前

    这是我想做的一个例子。

    <TEST>
      <NODE>
        <A id="ELEMENT_1"/>
        <A id="ELEMENT_2"/>
        <A id="ELEMENT_3"/>
      </NODE>
      <SOME_OTHER_NODE>
        <B nodeId="ELEMENT_1" invalid="1"/>
      </SOME_OTHER_NODE>
    </TEST>
    

    XSL:

    <xsl:apply-templates select="A[?? only select the A's where there is no B where A/@id = B/@nodeId and B/@invalid = 1 ??]"/>
    

    <xsl:apply-templates select="(ANSWER|GROUP)[position() mod 2 = 0]"/>
    

    我想找到一种方法来限制基于xml中不同元素的答案选择。希望我已经解释清楚了,如果没有请告诉我。也许有更好的方法来做这样的事情。我愿意接受任何反馈或建议。谢谢。

    1 回复  |  直到 15 年前
        1
  •  2
  •   user357812 user357812    15 年前

    此XPath表达式(节点集比较)与 NODE 作为上下文:

    A[not(@id = ../../SOME_OTHER_NODE/B[@invalid='1']/@nodeId)]
    

    带钥匙:

    <xsl:key name="kInvalidTest" match="B[@invalid=1]" use="@nodeId"/>
    ...
    <xsl:appy-templates select="A[not(key('kInvalidTest',@id))]"/>