2013-06-16 3 views
0

누구든지 도와 줄 수 있습니까? 나는 XSLT에 익숙하지 않고 요소 테이블을 만들려고 노력하고있다. 아래의 예제를 간소화하고 세 셀의 행에 출력을 가져 왔지만 행 사이에 쓸데없는 공백이 생깁니다. 누군가 내가 잘못하고있는 것을 말할 수 있습니까?XML을 3 셀의 HTML 행으로 변환하지만 불필요한 공백이 생기기

<apply-templates /> 두 개가 필요합니까? 행 경기? 사전에

많은 감사, 알렉스

이 XML입니다 :

<!-- Rows --> 
<xsl:template match="r[position() mod 3 = 1]"> 
    <div class="row"> 
     <xsl:apply-templates mode="cell" select="." /> 
     <xsl:apply-templates mode="cell" select="./following-sibling::r[not(position() > 2)]" /> 
    </div> 
</xsl:template> 

<!-- Cells --> 
<xsl:template match="r" mode="cell"> 
    <div class="cell"> 
     <xsl:value-of select="@t"/> 
    </div> 
</xsl:template> 

MY OUTPUT (행 사이의 불필요한 공백을 참고) :

<?xml version="1.0" encoding="iso-8859-1"?> 
    <products> 
     <r t='title1'>...</r> 
     <r t='title2'>...</r> 
     <r t='title3'>...</r> 
     <r t='title4'>...</r> 
     <r t='title5'>...</r> 
     <r t='title6'>...</r> 
     <r t='title7'>...</r> 
     <r t='title8'>...</r> 
     <r t='title9'>...</r> 
    </products> 

이 XSL입니다

<div class="row"> 
    <div class="cell">Title1</div> 
    <div class="cell">Title2</div> 
    <div class="cell">Title3</div> 
</div> 









<div class="row"> 
    <div class="cell">Title4</div> 
    <div class="cell">Title5</div> 
    <div class="cell">Title6</div> 
</div> 









<div class="row"> 
    <div class="cell">Title7</div> 
    <div class="cell">Title8</div> 
    <div class="cell">Title9</div> 
</div> 

답변

0

글쎄, 시작하는 것은 유효하지 않은 XML 일 수 없습니다. "유효한"XML 파일에는 하나 이상의 루트 요소가 포함되어 있습니다. XML에는 루트에 9 개의 "r"요소가 있습니다.

XSLT로 처리하기 전에 먼저 유효한 항목부터 시작하십시오.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
<xsl:template match="r[position() mod 3 = 1]"> 
    <div class="row"> 
     <xsl:apply-templates mode="cell" select="." /> 
     <xsl:apply-templates mode="cell" select="./following-sibling::r[not(position() > 2)]" /> 
    </div> 
</xsl:template> 

<xsl:template match="r" mode="cell"> 
    <div class="cell"> 
     <xsl:value-of select="@t"/> 
    </div> 
</xsl:template> 

<xsl:template match="text()"/> 
</xsl:stylesheet> 

은 색슨 (새로운 라인을 사용하지 않고이 출력을 생성합니다 :

이 XSL (난 당신이 "..."그렇지 않으면 일치 때문에) 텍스트 (의 일치를 제거하기 위해 템플릿을 추가주의 모든) :

<?xml version="1.0" encoding="utf-8"?><div class="row"><div class="cell">title1</div><div class="cell">title2</div><div class="cell">title3</div></div><div class="row"><div class="cell">title4</div><div class="cell">title5</div><div class="cell">title6</div></div><div class="row"><div class="cell">title7</div><div class="cell">title8</div><div class="cell">title9</div></div> 

당신은 < XSL 추가하는 경우 : 출력 들여 쓰기 = "예"/>이에, 당신은 당신이 <에 대한 일치를 지정하지 않는 한 당신이 기대하는 정확한 출력이 또한 잘못된 XML 출력을 얻을 것이다 얻을 것입니다. 제품> 루트 태그 출력

+0

안녕하세요 @KevinBrown 사과, 내 XML 예제를 수정했습니다. – Alex2134

+0

나는 생각하기에 "공백"이라고 생각하지 않습니다. 입력 XML에서 사이에 "실제로"무엇이 있습니까? 일치하는 것을 제거하는 템플리트가 없으면 "..."또는 다른 내용이 될 수 없습니다. 당신이 제공 한 짧은 예제를 감안할 때, "..."은 여전히 ​​명중되어 출력에있을 것이고 사실 각 행 블록 사이에있게 될 것입니다. –

+0

XSL 및 기타 가능한 템플릿의 맨 위에는 무엇이 있습니까? 모든 것을보고 진단 할 수 없습니다. 나는 당신이 뭔가 다른 것을 가지고 있다고 생각합니다. –

관련 문제