2011-12-17 6 views
0

네임 스페이스가 다른 특성을 가진 XML이 있습니다. 이는 확장 된 XHTML의 일종입니다. 모든 비 xhtml 네임 스페이스 속성을 덤프하고 싶습니다.XSLT 2.0 템플릿 일치 - 원하는 네임 스페이스에 포함되지 않은 모든 특성 제거

예시적인 소스 XML : 순간

<html> 
    <body> 
    <p class="test" xy:foo="true">blah</p> 
    </body> 
</html> 

, 나는 다음과 같은 한 XSLT 템플릿 :

<xsl:template match="@*"> 
    <xsl:choose> 
     <xsl:when test='namespace-uri()="http://www.w3.org/1999/xhtml"'><xsl:copy-of select="."/></xsl:when> 
     <xsl:otherwise></xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

원하는 출력 XML :

<html> 
    <body> 
    <p class="test">blah</p> 
    </body> 
</html> 

를하지만하지 않는 것 왜냐하면 나는 출력 XML을 속성없이 완벽하게 얻는다. namespace-uri()이 예상대로 작동하지 않는다는 느낌이 들었습니다. 어떤 아이디어?

답변

1

XHTML 요소의 속성 (예 : class)은 XHTML 네임 스페이스가 아닌 네임 스페이스의 특성입니다. 따라서

<xsl:template match="@*[namespace-uri() != '']"/> 

및 ID 변환 템플릿을 사용하십시오.

+0

감사합니다. 많이 생각합니다. – Alp