XSLT如何避免选择节点

时间:2015-05-29 08:38:39

标签: xml xslt xslt-2.0

大家好我想申请我的节点,但有两个节点我不会选择。如何避免选择2个节点,但如何在select中连接我的语句。我使用氧气和xslt 2.0。

<xsl:apply-templates select="*[not(local-name() = 'pc')] |
   *[not(local-name() = 'computer')]"/>

XML的文件

 <a/>
  <b/>
  <pc/>
  <computer/>
  <a/>
  <b/>
  <c/>

依旧......

预期选定的节点,,,,

1 个答案:

答案 0 :(得分:2)

你的表达意味着“给我一切不是pc的东西加上一切不是computer”的东西。由于pc不是computer,反之亦然,因此|的每一方都选择了另一方排除的节点,并最终得到了所有内容。您需要针对同一节点测试这两个条件,并说“给我一个既不是pc也不是computer的元素”:

<xsl:apply-templates select="*[not(local-name() = 'pc')][not(local-name() = 'computer')]"/>

但是,由于您使用的是XSLT 2.0,因此可以使用命名空间通配符和except运算符更简洁地表达:

<xsl:apply-templates select="* except (*:pc, *:computer)"/>

根据文档和样式表声明的名称空间(如果有),您可能不需要*:,或者您可以使用固定前缀替换它以正确使用名称空间而不是忽略它们。

相关问题