2016-06-13 4 views
0

XML 및 XSL을 처음 사용합니다. 나는 우리의 공급 업체 소프트웨어에 의해 생성 된 XML 문자열을 가져와 Excel 형식으로 변환하려고합니다. XML에는 반복 행이있을 수 있으며 각 행에는 여러 개의 연관된 하위 필드가 있습니다. 하위 필드는 항상 행에서 행까지 동일하며 순서는 같지만 XML마다 다를 수 있습니다. 행 수는 파일마다 변경됩니다.부모를 열로 표시하고 일치하는 자식을 행으로 표시하는 XSL

for-each가 여기에 있고, 중첩되어 있거나 관계형 위치를 사용하고 있다는 느낌이 들지만 쿼리하는 함수 주위에 머리를 감싸는 데 문제가 있습니다. 필자는 많은 샘플을 검토했지만 모든 솔루션은 질문에 맞춰져 있으며 원하는 출력이 내 것과 같은 곳을 찾지 못했습니다.

도움이되었거나 올바른 방향으로 조금 움직여 주시면 감사하겠습니다.

감사합니다.

샘플 XML :

<?xml version="1.0" standalone="yes" ?> 
<RpcData SrcNm="SnapshotBuckets" SrcTyp="DIR" ClientID="000" LoanNo="0000000000" Borrower="" RsltCd="0"> 
    <RepeatingFieldSet Nm="Hazard" Type="All Data" Count="3"> 
    <Row Index="1"> 
     <Fld Nm="Type">A</Fld> 
     <Fld Nm="AgentCode">TESTAP</Fld> 
     <Fld Nm="Agent City">ANYTOWN</Fld> 
     <Fld Nm="Agent Desc Line 1">APPLE</Fld> 
     <Fld Nm="Agent Desc Line 2">PICKERS</Fld> 
     <Fld Nm="Agent Desc Line 3">123 MAIN ST</Fld> 
     <Fld Nm="Agent Phone">(718) 555-1212</Fld> 
     <Fld Nm="Agent State">AL</Fld> 
     <Fld Nm="Agent ZIP Code">00001</Fld> 
    </Row> 
    <Row Index="2"> 
     <Fld Nm="Type">B</Fld> 
     <Fld Nm="AgentCode">TESTBA</Fld> 
     <Fld Nm="Agent City">ANYTOWN</Fld> 
     <Fld Nm="Agent Desc Line 1">BANANA</Fld> 
     <Fld Nm="Agent Desc Line 2">BUNCHERS</Fld> 
     <Fld Nm="Agent Desc Line 3">456 MAIN ST</Fld> 
     <Fld Nm="Agent Phone">(718) 555-1213</Fld> 
     <Fld Nm="Agent State">AK</Fld> 
     <Fld Nm="Agent ZIP Code">00002</Fld> 
    </Row> 
    <Row Index="3"> 
     <Fld Nm="Type">C</Fld> 
     <Fld Nm="AgentCode">TESTCH</Fld> 
     <Fld Nm="Agent City">ANYTOWN</Fld> 
     <Fld Nm="Agent Desc Line 1">CHERRY</Fld> 
     <Fld Nm="Agent Desc Line 2">PITTERS</Fld> 
     <Fld Nm="Agent Desc Line 3">789 MAIN ST</Fld> 
     <Fld Nm="Agent Phone">(718) 555-1214</Fld> 
     <Fld Nm="Agent State">CA</Fld> 
     <Fld Nm="Agent ZIP Code">00003</Fld> 
    </Row> 
    </RepeatingFieldSet> 
</RpcData> 

원하는 출력 : 지금까지

 
Field     1    2    3 
Type     A    B    C 
AgentCode    TESTAP   TESTBA   TESTCH 
Agent City    ANYTOWN   ANYTOWN   ANYTOWN 
Agent Desc Line 1  APPLE   BANANA   CHERRY 
Agent Desc Line 2  PICKERS   BUNCHERS  PITTERS 
Agent Desc Line 3  123 MAIN ST  456 MAIN ST  789 MAIN ST 
Agent Phone    (718) 555-1212 (718) 555-1213 (718) 555-1214 
Agent State    AL    AK    CA 
Agent ZIP Code   00001   00002   00003 

XSL :

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:x="urn:schemas-microsoft-com:office:excel"> 
    <xsl:template match="/"> 
     <xsl:processing-instruction name="mso-application"><xsl:text>progid="Excel.Sheet"</xsl:text></xsl:processing-instruction> 
     <Workbook> 
      <Worksheet ss:Name="Sheet1"> 
       <Table> 
        <Row> 
         <Cell>Business Name</Cell> 
         <xsl:for-each select="RpcData/RepeatingFieldSet/Row"> 
          <Cell> 
           <xsl:value-of select="@Index"/> 
          </Cell> 
         </xsl:for-each> 
        </Row> 
        <xsl:for-each select="RpcData/RepeatingFieldSet/*/Fld"> 
         <Row> 
          <Cell> 
           <xsl:value-of select="@Nm"/> 
          </Cell> 
          <xsl:for-each select="*"> 
           <Cell> 
            <xsl:value-of select="."/> 
           </Cell> 
          </xsl:for-each> 
         </Row> 
        </xsl:for-each> 
       </Table> 
      </Worksheet> 
     </Workbook> 
    </xsl:template>  
</xsl:stylesheet> 

답변

0

IIUC, 당신은 주어진 테이블 트랜스 원하는 - 컬럼 행 , 행을 필드. foilowing 스타일 시트는 이것을 어떻게 수행 할 수 있는지 보여줍니다. 간단히하기 위해 HTML 표가 생성됩니다. Excel 워크 시트의 조정은 간단해야합니다.

<xsl:stylesheet version="1.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="/RpcData"> 
    <xsl:variable name="col" select="RepeatingFieldSet/Row"/> 
    <xsl:variable name="row" select="RepeatingFieldSet/Row[1]/Fld"/> 
    <table border="1"> 
     <!-- header row --> 
     <tr> 
      <th>Field</th> 
      <xsl:for-each select="$col"> 
       <th> 
        <xsl:value-of select="@Index"/> 
       </th> 
      </xsl:for-each> 
     </tr> 
     <!-- data rows --> 
     <xsl:for-each select="$row"> 
      <xsl:variable name="i" select="position()"/> 
      <tr> 
       <th><xsl:value-of select="@Nm"/></th> 
       <xsl:for-each select="$col"> 
        <td> 
         <xsl:value-of select="Fld[$i]"/> 
        </td> 
       </xsl:for-each> 
      </tr>  
     </xsl:for-each> 
    </table> 
</xsl:template> 

</xsl:stylesheet> 

1.0 귀하의 예제 입력에 적용 XSLT는 (렌더링) 결과가 될 것입니다 : 내가 원하는

enter image description here

+0

정확히 무엇인지. 정말 고맙습니다! – ImagineMBE

관련 문제