XSL / XPath语法,用于选择给定命名空间中的属性

时间:2014-04-04 11:50:07

标签: xslt xpath

鉴于我在xml元素的上下文中:

  <xsl:copy-of select="@*"/>

会给我一份所有属性的副本。我正在寻找一个xpath表达式,它将给我所有属性除了给定命名空间中的那些,比如'x' 我目前的代码:

  <xsl:copy-of select="@*[not(starts-with(name(),'x:'))]"/>

有效,但不能成为最佳答案。

NB很高兴了解XSLT2.0但寻找1.0答案

2 个答案:

答案 0 :(得分:4)

在XSLT 2.0中,您可以编写<xsl:copy-of select="@* except @x:*"/>。使用XSLT 1.0,您可以使用<xsl:copy-of select="@*[not(namespace-uri() = 'http://example.com/')]"/>(当然用您的输入属性的命名空间替换http://example.com/)。

答案 1 :(得分:3)

取代xsl:copy-of,执行xsl:apply-templates select="@*",并拥有两个模板规则

<xsl:template match="@*"><xsl:copy/></xsl:template>

<xsl:template match="@x:*"/>