2010-07-07 30 views
1

我有这个片段的XSLT代码:在XSLT/XPath中,如何获取与特定名称不匹配的第一个属性?

<xsl:variable name="key" select="@*[1]"/> 

但我需要它实际设置key成为第一属性(如果存在)不具有一个特别的名称。因此,这两个节点将具有相同的key,并且如果它存在special_attr将被忽略。

<MyNode var="1" /> 
<MyNode special_attr="foo" var="1" /> 

什么是正确的选择语法来获得他的名字是不是special_attr第一属性的值?

回答

3
<xsl:variable name="key" select="@*[not(name() = 'special_attr')][1]"/> 
+1

不幸的是,这可能不是你想要的,因为在XPath中,“属性节点的相对顺序依赖于实现”(http://www.w3.org/TR/xpath/#dt -document阶)。所以从理论上讲,除了_special_attr_之外哪个属性会首先出现。 – 2010-07-07 17:35:06

+0

@Owen:有趣,谢谢。我的要求是支持此修复:http://www.codeproject.com/KB/XML/XMLOverride.aspx?msg=3527558#xx3527558xx,他的设计的一部分使用“第一属性是关键”的概念。它在我的实施过程中始终如一地工作,但他的设计可能应该更好地考虑标准。 – 2010-07-07 19:17:00

+0

@Scott:同意。在序列很重要的情况下,元素就是你想要的,而不是属性。 – 2010-07-07 20:47:10