2016-11-22 4 views
0

모든면에서 시도했지만 결과가 없습니다. XSLT를 사용하여 XML을 다음과 같이 변환 할 수있는 방법은 무엇입니까?Xslt 재귀 적 변환

<root> 
    <row>topic</row> 
    <row>Topic1</row> 
    <row>words</row> 
    <row>word1</row> 
    <row>word2</row> 
    <row>word3</row> 
    <row>words</row> 
    <row>word4</row> 
    <row>word5</row> 
    <row>word6</row> 
    <row>topic</row> 
    <row>Topic2</row> 
    <row>words</row> 
    <row>word7</row> 
    <row>word8</row> 
    <row>word9</row> 
    <row>topic</row> 
    <row>Topic3</row> 
    <row>words</row> 
    <row>word10</row> 
    <row>word11</row> 
    <row>word12</row> 
</root> 

XML과 같이?

<topic>Topic1 
    <words>word1word2word3word4word5word6</words> 
</topic> 
<topic>Topic2 
    <words>word7word8word9</words> 
</topic> 
<topic>Topic3 
    <words>word10word11word12</words> 
</topic> 

'주제'와 ... 사전에

많은 감사의 말씀 '값이 정기적으로 XML에서 발생하는 내가'말 '로 단어를 주제별로 각 주제 그룹의 첫 번째 그룹 것! XSLT 2.0

+0

않습니다 프로세서 지원 XSLT 2.0? –

+0

예, XSLT 2.0을 지원합니다! – AmintaCode

답변

1

, 당신이 그렇게 간단 수 :

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="root"> 
    <xsl:copy> 
     <xsl:for-each-group select="row" group-starting-with="row[.='topic']"> 
      <topic> 
       <xsl:value-of select="current-group()[2]"/> 
       <words> 
        <xsl:value-of select="current-group()[position() gt 3]" separator=""/> 
       </words> 
      </topic> 
     </xsl:for-each-group> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

최고 빠르고 우아한 해결책, 감사합니다 !! – AmintaCode

+0

는 항목 1 또는 항목 2 경우 대신 나는 B C 등 무엇을했다? 요소의 모든 단일 셀을 어떻게 출력 할 수 있습니까? @ michael.hor257k – AmintaCode

+0

@AmintaCode 현재 질문에 대한 연결이 표시되지 않습니다. 왜 새 게시물을 올리지 않으시겠습니까? –