2013-03-12 2 views
2

XSLT를 사용하여 일부 코드를 생성 할 때 올바르게 들여 쓰기가 어려워졌습니다.생성 된 출력에 들여 쓰기 유지

생성 코드에서 첫 번째 public Builder name...이 의도 된 방식으로 정렬되어 있습니다. 그러나 나머지 메서드는 올바르게 정렬되지 않으며 다른 모든 메서드는 올바르게 정렬되지 않습니다. 나는 나머지 코드의 들여 쓰기를 따라 들여 쓰기를 의도했다.

어떻게 정렬 문제를 해결합니까?

예제를 보여주기 위해 생성 된 코드의 정확성에 대해 걱정하지 마십시오.


XSLT

<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fn="http://www.w3.org/2005/xpath-functions"> 

    <xsl:output method="text" name="text" /> 
    <xsl:strip-space elements="*" /> 

    <xsl:template match="..." mode="builder">public Builder <xsl:value-of select="fu:lowercaseFirstLetter(@name)"/>(final String value) { 
     this.dao.getMy<xsl:value-of select="fu:capitalizeFirstLetter(../@name)"/>().set<xsl:value-of select="fu:capitalizeFirstLetter(@name)"/>(value); 
     return this; 
    } 
    </xsl:template> 

    <xsl:template match... > 
     <xsl:result-document href="..." format="text"> 
public class <xsl:value-of select="..."/> implements Parent { 

    public boolean test(Object o) { 

     <xsl:apply-templates mode="builder"/> 

     return true; 

    } 

} 

     </xsl:result-document> 
    </xsl:template> 
</xsl:stylesheet> 

생성 된 코드

public class ATest implements Parent { 

    public boolean test(Object o) { 

     public Builder name(final String value) { 
     dao.getMyATest().set_valid(value); 
     return this; 
    } 
    public Builder name(final String value) { 
     dao.getMyATest().set_valid(value); 
     return this; 
    } 
    public Builder name(final String value) { 
     dao.getMyATest().set_valid(value); 
     return this; 
    } 
    public Builder name(final String value) { 
     dao.getMyATest().set_valid(value); 
     return this; 
    } 

     return true; 

    } 

} 

의도 결과

public class ATest implements Parent { 

    public boolean test(Object o) { 

     public Builder name(final String value) { 
      dao.getMyATest().set_valid(value); 
      return this; 
     } 
     public Builder name(final String value) { 
      dao.getMyATest().set_valid(value); 
      return this; 
     } 
     public Builder name(final String value) { 
      dao.getMyATest().set_valid(value); 
      return this; 
     } 
     public Builder name(final String value) { 
      dao.getMyATest().set_valid(value); 
      return this; 
     } 

     return true; 

    } 

} 
+0

무엇이 들여 쓰기입니까? 들여 쓰기 란? – Jayan

+0

아니, 들여 쓰기를 의미합니다. http://www.merriam-webster.com/dictionary/indention – prolink007

+0

괜찮아 ... 구글은 들여 쓰기를 가리켰다 – Jayan

답변

2

용액 1 : 생성 된 자바 압입 걱정 사후 처리 단계로서 포맷을 넣지 않는다.

해결책 2 : 공백 생성에주의하십시오. 공백을 포함하여 리터럴 텍스트 출력을 결과에 포함 시키려면 xsl : text를 사용하여 스타일 시트를 읽을 수있게 만드는 데 사용되는 공백에서 출력 할 공백을 구분하십시오. 현재의 들여 쓰기 수준을 제공하는 모든 템플릿 규칙에 "들여 쓰기"매개 변수가 있고, 적용 템플릿

<xsl:apply-templates> 
    <xsl:with-param name="indent" select="$indent + 2"/> 
</xsl:apply-templates> 

를 호출 할 때 들여 쓰기 공백을 생성하는 기능 또는 명명 된 템플릿을 가지고 거기에 X를 추가

<xsl:call-template name="do-indent"> 
    <xsl:with-param name="indent" select="$indent + 2"/> 
</xsl:call-templates> 
+0

나는 실제로 지금은 매우 비슷한 해결책을 연구 중이다. 나는 당신의 모습이 더 좋아 보인다. 감사! – prolink007