鉴于我在xml元素的上下文中:
<xsl:copy-of select="@*"/>
会给我一份所有属性的副本。我正在寻找一个xpath表达式,它将给我所有属性除了给定命名空间中的那些,比如'x' 我目前的代码:
<xsl:copy-of select="@*[not(starts-with(name(),'x:'))]"/>
有效,但不能成为最佳答案。
NB很高兴了解XSLT2.0但寻找1.0答案
答案 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:*"/>