2010-07-07 1 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-order). 따라서 이론적으로 _special_attr_ 이외의 속성이 먼저 올 것입니다. –

+0

@Owen : 흥미 롭습니다. 감사합니다. 내 요청은이 수정 사항을 지원하는 것이 었습니다 : http://www.codeproject.com/KB/XML/XMLOverride.aspx?msg=3527558#xx3527558xx, 그리고 그의 디자인의 일부는 "첫 번째 속성은 핵심입니다"라는 개념을 사용합니다. 그것은 내 구현에서 일관되게 작동하지만 아마도 그의 설계가 표준을 고려해야 할 것입니다. –

+0

@ Scott : 동의했다. 순서가 중요한 경우, 요소는 속성이 아닌 원하는 것입니다. –

관련 문제