2014-04-04 3 views
2

에없는 속성을 선택합니다 :XSL은 내가 XML 요소의 맥락에서입니다 감안할 때 주어진 공간

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

나에게 모든 속성의 사본을 제공 할 것입니다. 나는 모든 주어진 네임 스페이스에 제외 그 속성 나에게 줄 것이다 XPath 식을 찾고, 'x'는 말을 내 현재 코드 :

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

작동하지만 최적의 해답이 될 캔트. 당신이 <xsl:copy-of select="@* except @x:*"/>를 작성할 수 XSLT 2.0에서 1.0 답변

답변

4

에 대한 XSLT2.0하지만 찾고에 대한 자세한 내용은 해피

NB. XSLT 1.0을 사용하면 <xsl:copy-of select="@*[not(namespace-uri() = 'http://example.com/')]"/>을 사용할 수 있습니다 (물론 http://example.com/을 입력 속성의 네임 스페이스로 대체하십시오). 대신 xsl:copy-of

+0

감사가, 내가 직접 단순히 내가 두 번 XSL 코드에서 URI를 가진 싫어 URI를 사용하기를 꺼려 해요. 위의 내 이름() 해킹에 비해 이것의 효율성 이점이 있습니까? – tolanj

+4

아니요, 효율성은 다르지 않지만 드물게 예를 들면. 'namespace-uri' 검사는 두 속성을 찾고 'starts-with' 검사는 오직 하나만 찾습니다. –

3

xsl:apply-templates select="@*"을, 두 개의 템플릿 규칙에 대한 답변을

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

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

나는이 해결책을 알고 있었지만 시간이 주어진다면 이것이 약간의 유지 보수 악몽이 필요하다. – tolanj

관련 문제