2010-06-07 7 views
7

는 XSLT

단일 속성을 변경하여 당신이 생각할 수있는 가장 간단한 XSLT는 단지이 경우, 최초의 값을 변환하는 /configuration/system.web/compilation/@debug 속성을 true에서 false에입니까?

+0

좋은 질문 (+1). 간단하고 정확한 솔루션에 대한 내 대답을보십시오. Lucero의 대답은 현재 상당히 틀린 것입니다 - 그의 대답에 대한 저의 주석을보십시오. –

답변

6

이 변환 : 첫 번째 compilation 아이의 debug 속성을 수정합니다

<configuration> 
    <system.web> 
     <compilation debug="true" defaultLanguage="C#"> 
      <!-- this is a comment --> 
     </compilation> 

     <compilation debug="true" defaultLanguage="C#"> 
      <!-- this is another comment --> 
     </compilation> 
    </system.web> 
</configuration> 

이 원하는 정확한 결과를 생성 :이 XML 문서에 적용

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*" name="identity"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="system.web/compilation[1]/@debug"> 
    <xsl:attribute name="debug">false</xsl:attribute> 
</xsl:template> 
</xsl:stylesheet> 

어떤 system.web 요소 (그러나 우리는 구성 파일에 하나의 system.web 요소가 있습니다. 우리가 보는 바와 같이 필요에 따라

<configuration> 
    <system.web> 
     <compilation debug="false" defaultLanguage="C#"> 
      <!-- this is a comment --> 
     </compilation> 
     <compilation debug="true" defaultLanguage="C#"> 
      <!-- this is another comment --> 
     </compilation> 
    </system.web> 
</configuration> 

는, 첫 번째 debug atribute는 false에 modifird된다.

+1

이것은 XSLT에 대한 신원 패턴 변환이라고 불리며, @ Dimitre Novatchev가 지적했듯이 매우 강력합니다. – lavinio

+0

'xsl : attribute' 엘리먼트는 바뀌는'xsl : template'과 일치하는 XPath에 이미 주어 졌을 때 변경 될 속성의 이름을 언급해야합니다. "이 애트리뷰트 설정"이라고 할 수있는 방법이 있습니까? –

+0

@TomAnderson : 하나는 AVT 표기법을 사용할 수 있습니다 :''이것은 당신이 원하는 것이 아니라 어떤면에서 더 좋습니다. –

-1

<xsl:attribute name="debug">false</xsl:attribute><compilation>? 아니면 나는 그 질문을 오해하고 있는가?