2015-01-11 3 views
3

이것은 분명히 SSCCE입니다. StringTemplate 들여 쓰기가 문자열 안에 공백을 추가합니다.

나는 다음과 같은 템플릿 파일이 있습니다

xml(value)::=<< 
<a> 
    <b> 
     ^value^ 
    </b> 
</a> 
>> 

... 다음 코드 :

private static final String VALUE="alpha\nbeta"; 
public static void main(String args[]) throws Exception { 
    STGroup stGroup = new STGroupFile("templates/a.xml.stg", '^', '^'); 
    ST st = stGroup.getInstanceOf("xml"); 
    st.add("value", VALUE); 
    System.out.printf("--------\n%s\n--------", st.render()); 
} 

코드가 생성됩니다 즉

[java] -------- 
[java] <a> 
[java]  <b> 
[java]   alpha 
[java]   beta 
[java]  </b> 
[java] </a> 
[java] -------- 

을, 문자열 공백이 추가되면 값이 수정됩니다. 클라이언트가 공백을 제거해도 XML 파일을 구문 분석하면 공백이 추가되어 내부에 문자열로 문자열 값이 변경된 것으로 인식됩니다.

은 내가 솔루션으로 템플릿을 선언하는 것을 이해 :

xml(value)::=<< 
<a> 
    <b>^value^</b> 
</a> 
>> 

...하지만도이 솔루션은 xml 렌더링을 포함 할 수있는 모든 다른 노드는 오른쪽 정렬 것을 필요로한다.

예에서 상기 렌더링 값이 다른 템플릿에 포함된다고 가정하면, 다음 템플릿 :

enclosing-document(xml)::=<< 
<h1> 
    <h2> 
^xml^ 
    </h2> 
</h1> 
>> 

:

enclosing-document(xml)::=<< 
<h1> 
    <h2> 
     ^xml^ 
    </h2> 
</h1> 
>> 

또한 ...로 다시 기록 될 것이다 ... 사실상 모든 노드의 왼쪽 정렬이 필요합니다.

StringTemplate이 특정 문자열 매개 변수를 그대로 내 보내거나 (줄 바꿈이없는 경우에는 들여 쓰지 않고) 동시에 다른 모든 경우에 공백/들여 쓰기를 유지하도록 지시 할 수 있습니까 (예 : my 렌더링 된 출력은 추악하지 않을 것입니다)?

업데이트 나는 NoIndentWriter를 사용하여 시도하지만 with other problems을 만났다. 따라서 NoIndentWriter은 실제로 다중 행 문자열을 방출하지만 이 아니고이 아니라 템플릿 파일에 공백이 있습니다. 그래서 저는 정사각형으로 돌아 왔습니다.

+0

내용을 ''섹션에 묶으면 결과가 변경됩니까? – dasblinkenlight

+0

@ dasblinkenlight 나는 당신이 제안한 것을 이해하고 있는지 확신하지 못합니다. 여하튼, CDATA가 템플릿에 추가되면, 다중 행 문자열의 들여 쓰기 중 공백 삽입에 관해서는 아무 변화도 없습니다. 또한, 최종 문서에 CDATA 섹션을 추가 할 때 부작용이 없다는 것이 확실하지 않습니다. –

+0

나는 '에 대해 생각하고 있었는데, stringtemplate이'CDATA' 섹션에 관심을 가지기를 바랬다. 보이지 않는 것 같습니다. 오 잘 ... – dasblinkenlight

답변

0

그래서 내가 한 것은 NoIndentWriter 코드를 in this post과 함께 사용하는 것이 었습니다. 그런 다음, 못생긴 XML을 초래하는 들여 쓰기의 부족을 해결하기 위해 (위의 게시물에서 불만을 토로 함) XML 설명 프린터 here을 사용했습니다.

관련 문제