2013-03-21 2 views
1

플랫 파일 스키마의 XSLT 변환과 관련하여 도움이 필요합니다. Record 노드의 직접 하위 노드를 Record 노드가 포함 된 노드로 결합 할 수 있습니까? 자식 512이 필요하며 최소 및 최대 발생 횟수가 1이고 새로운 Record 노드의 시작을 표시합니다.XSLT 1.0을 사용하여 XML을 변환하는 데 도움이 필요합니다.

입력 :

<ns0:Root xmlns=""> 
    <Header> 
     <node01>AA</node01> 
     <node02>123</node02> 
    </Header> 
    <Record> 
     <512> 
      <node01>BB</node01> 
      <node02>123</node02> 
     </512> 
    </Record> 
    <Record> 
     <513> 
      <node01>CC</node01> 
      <node02>123</node02> 
     </513> 
    </Record> 
    <Record> 
     <512> 
      <node01>DD</node01> 
      <node02>123</node02> 
     </512> 
    </Record> 
    <Record> 
     <515> 
      <node01>JJ</node01> 
      <node02>123</node02> 
     </515> 
    </Record> 
    <Record> 
     <512> 
      <node01>EE</node01> 
      <node02>123</node02> 
     </512> 
    </Record> 
    <Record> 
     <513> 
      <node01>FF</node01> 
      <node02>123</node02> 
     </513> 
    </Record> 
    <Record> 
     <514> 
      <node01>GG</node01> 
      <node02>123</node02> 
     </514> 
     <514> 
      <node01>HH</node01> 
      <node02>123</node02> 
     </514> 
    </Record> 
    <Footer> 
     <node01>II</node01> 
     <node02>123</node02> 
    </Footer> 
</ns0:Root> 

원하는 출력 :

<ns0:Root xmlns=""> 
    <Header> 
     <item01>AA</item01> 
     <item02>123</item02> 
    </Header> 
    <Record> 
     <512> 
      <item01>BB</item01> 
      <item02>123</item02> 
     </512> 
     <513> 
      <item01>CC</item01> 
      <item02>123</item02> 
     </513> 
    </Record> 
    <Record> 
     <512> 
      <item01>DD</item01> 
      <item02>123</item02> 
     </512> 
     <515> 
      <item01>JJ</item01> 
      <item02>123</item02> 
     </515> 
    </Record> 
    <Record> 
     <512> 
      <item01>EE</item01> 
      <item02>123</item02> 
     </512> 
     <513> 
      <item01>FF</item01> 
      <item02>123</item02> 
     </513> 
     <514> 
      <item01>GG</item01> 
      <item02>123</item02> 
     </514> 
     <514> 
      <item01>HH</item01> 
      <item02>123</item02> 
     </514> 
    </Record> 
    <Footer> 
     <item01>II</item01> 
     <item02>123</item02> 
    </Footer> 
</ns0:Root> 

감사합니다 친절 필립

P.S에 관하여 : XSLT 2.0을 사용할 수 없습니다. 에 실행하면

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

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

    <xsl:template match="Record[r512]"> 
    <xsl:copy> 
     <xsl:apply-templates select="." mode="iterate" /> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="Record" /> 

    <xsl:template match="Record" mode="iterate"> 
    <xsl:apply-templates /> 
    <xsl:apply-templates select="following-sibling::Record[1][not(r512)]" 
         mode="iterate"/> 
    </xsl:template> 
</xsl:stylesheet> 

: 법적 XML은 (요소 이름은 숫자로 시작할 수 없습니다) 아니에요,하지만 당신은 "R"로 시작하는 모든 잘못된 요소를 이름이 랬

답변

2

, 다음을 수행 할 수 있습니다 이 입력 :

<ns0:Root xmlns="" xmlns:ns0="nsss"> 
    <Header> 
    <node01>AA</node01> 
    <node02>123</node02> 
    </Header> 
    <Record> 
    <r512> 
     <node01>BB</node01> 
     <node02>123</node02> 
    </r512> 
    </Record> 
    <Record> 
    <r513> 
     <node01>CC</node01> 
     <node02>123</node02> 
    </r513> 
    </Record> 
    <Record> 
    <r512> 
     <node01>DD</node01> 
     <node02>123</node02> 
    </r512> 
    </Record> 
    <Record> 
    <r515> 
     <node01>JJ</node01> 
     <node02>123</node02> 
    </r515> 
    </Record> 
    <Record> 
    <r512> 
     <node01>EE</node01> 
     <node02>123</node02> 
    </r512> 
    </Record> 
    <Record> 
    <r513> 
     <node01>FF</node01> 
     <node02>123</node02> 
    </r513> 
    </Record> 
    <Record> 
    <r514> 
     <node01>GG</node01> 
     <node02>123</node02> 
    </r514> 
    <r514> 
     <node01>HH</node01> 
     <node02>123</node02> 
    </r514> 
    </Record> 
    <Footer> 
    <node01>II</node01> 
    <node02>123</node02> 
    </Footer> 
</ns0:Root> 

생산 물품 :

<ns0:Root xmlns:ns0="nsss"> 
    <Header> 
    <node01>AA</node01> 
    <node02>123</node02> 
    </Header> 
    <Record> 
    <r512> 
     <node01>BB</node01> 
     <node02>123</node02> 
    </r512> 
    <r513> 
     <node01>CC</node01> 
     <node02>123</node02> 
    </r513> 
    </Record> 
    <Record> 
    <r512> 
     <node01>DD</node01> 
     <node02>123</node02> 
    </r512> 
    <r515> 
     <node01>JJ</node01> 
     <node02>123</node02> 
    </r515> 
    </Record> 
    <Record> 
    <r512> 
     <node01>EE</node01> 
     <node02>123</node02> 
    </r512> 
    <r513> 
     <node01>FF</node01> 
     <node02>123</node02> 
    </r513> 
    <r514> 
     <node01>GG</node01> 
     <node02>123</node02> 
    </r514> 
    <r514> 
     <node01>HH</node01> 
     <node02>123</node02> 
    </r514> 
    </Record> 
    <Footer> 
    <node01>II</node01> 
    <node02>123</node02> 
    </Footer> 
</ns0:Root> 
관련 문제