2011-02-06 5 views
1

현재 사용중인 시스템에서 선택한 레코드 데이터를 XML 형식으로 내보낼 수 있습니다. 이 시스템은 또한 XSLT를 사용하여 XML을 변환하는 옵션을 제공합니다. XML을 탭으로 구분 된 텍스트로 변환하여 다른 응용 프로그램으로 데이터를 가져올 수 있습니다.XML을 탭으로 구분 된 텍스트 파일로 변환하기위한 XSLT 수정

다음은 세 개의 레코드가 내보내지는 XML 샘플입니다. 네 개의 데이터 필드가 각 레코드와 함께 내보내도록 선택됩니다.

<?xml version="1.1" encoding="UTF-8"?> 
<!DOCTYPE Export> 
<ns:Export xmlns:ns="http://www.canto.com/ns/Export/1.0"> 
<ns:Layout tableName="AssetRecords"> 
    <ns:Fields> 
     <ns:Field uid="{5bbb974b-d50a-45de-bb40-f6d7fb36bfd8}" type="2" valueInterpretation="5"> 
      <ns:Name>Date Taken/Scanned</ns:Name> 
     </ns:Field> 
     <ns:Field uid="{af4b2e43-5f6a-11d2-8f20-0000c0e166dc}" type="0" valueInterpretation="0"> 
      <ns:Name>Title</ns:Name> 
     </ns:Field> 
     <ns:Field uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}" type="2" valueInterpretation="0"> 
      <ns:Name>ID</ns:Name> 
     </ns:Field> 
     <ns:Field uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}" type="0" valueInterpretation="0"> 
      <ns:Name>Categories</ns:Name> 
     </ns:Field> 
    </ns:Fields> 
</ns:Layout> 
<ns:Items> 
    <ns:Item catalogid="4" id="1"> 
     <ns:FieldValue uid="{5bbb974b-d50a-45de-bb40-f6d7fb36bfd8}" displayValue="Oct 10, 2010">2049029450</ns:FieldValue> 
     <ns:FieldValue uid="{af4b2e43-5f6a-11d2-8f20-0000c0e166dc}">teapot</ns:FieldValue> 
     <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">1</ns:FieldValue> 
     <ns:FieldValue uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}"> 
      <ns:CategoryValue>Artifacts:Daily Life Item</ns:CategoryValue> 
      <ns:CategoryValue>Images:Objects</ns:CategoryValue> 
     </ns:FieldValue> 
    </ns:Item> 
    <ns:Item catalogid="4" id="2"> 
     <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">2</ns:FieldValue> 
     <ns:FieldValue uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}"> 
      <ns:CategoryValue>Artifacts:Personal Artefact</ns:CategoryValue> 
      <ns:CategoryValue>Artifacts:Daily Life Item</ns:CategoryValue> 
      <ns:CategoryValue>Images:Objects</ns:CategoryValue> 
     </ns:FieldValue> 
    </ns:Item> 
    <ns:Item catalogid="4" id="10"> 
     <ns:FieldValue uid="{af4b2e43-5f6a-11d2-8f20-0000c0e166dc}">Product Overview</ns:FieldValue> 
     <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">10</ns:FieldValue> 
     <ns:FieldValue uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}"> 
      <ns:CategoryValue>Documents:Paper Records</ns:CategoryValue> 
     </ns:FieldValue> 
    </ns:Item> 
</ns:Items> 
</ns:Export> 

내 원하는 탭으로 구분 된 텍스트를 출력 내가 변환을 할 수있는 XSLT 파일을 주어진 다음의 표와 같이 https://lh5.googleusercontent.com/_Wsib_NwEZrA/TU6vzqbEGDI/AAAAAAAAAU0/V1SfGJyXJhQ/s800/2011-02-06_185321.png

엑셀

의 경우 열려 있습니다. 그러나 간단하고 직선적 인 XML 구조 만 처리 할 수 ​​있습니다. 표시 값을 사용하는, 아닌 숫자
    • 필드 이름 열로 헤더
    • 날짜
    • 를 도시되도록

      <?xml version="1.0" encoding="UTF-8"?> 
      <xsl:stylesheet version="1.0" 
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
          xmlns:ns="http://www.canto.com/ns/Export/1.0" 
          xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
      <xsl:output method="text" indent="yes" encoding="utf-8" standalone="yes"/> 
      <xsl:strip-space elements="*"/> 
      
      <xsl:template match="/"> 
          <Root> 
           <xsl:apply-templates select="/ns:Export/ns:Items/ns:Item"/> 
          </Root> 
      </xsl:template> 
      
      <xsl:template match="ns:Item"> 
          <xsl:for-each select="ns:FieldValue"> 
           <xsl:value-of select="normalize-space(text())"/> 
           <xsl:text>&#09;</xsl:text> 
          </xsl:for-each> 
          <xsl:text> 
      </xsl:text> 
      </xsl:template> 
      
      </xsl:stylesheet> 
      

      난 개선 된 버전이 좋아 카테고리 : 모든 카테고리 은 별도의 열로 표시됩니다.

    • 빈 데이터 : 빈 셀이 표시됩니다.

    XML 지식이 제한되어 있습니다. 누군가가 도움을 줄 수 있기를 바랍니다. 나는 몇 가지 새로운 필드 테스트까지 제공

    편집 (25) 2011 년 4 월

    XSLT 아주 잘 근무하고있다 :-) 감사합니다. 아래는 시스템에서 내 보낸 XML입니다. 그것은 두 개의 레코드로 구성됩니다.

    <?xml version="1.1" encoding="UTF-8"?> 
    <!DOCTYPE Export> 
    <ns:Export xmlns:ns="http://www.canto.com/ns/Export/1.0"> 
    <ns:Layout tableName="AssetRecords"> 
        <ns:Fields> 
         <ns:Field uid="{00a3b951-4c7b-4751-90c0-c88cf0eb4983}" type="10" valueInterpretation="0"> 
          <ns:Name>Test Table Field</ns:Name> 
          <ns:Layout tableName="AssetRecords/{00a3b951-4c7b-4751-90c0-c88cf0eb4983}"> 
           <ns:Fields> 
            <ns:Field uid="{86b3bf92-e7cc-4150-bd74-191ce4bf9374}" type="0" valueInterpretation="0"> 
             <ns:Name>Accession Number</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}" type="2" valueInterpretation="0"> 
             <ns:Name>Host Item ID</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}" type="2" valueInterpretation="0"> 
             <ns:Name>ID</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{8322d5e0-edc9-4c2a-9991-702c376d9edc}" type="0" valueInterpretation="0"> 
             <ns:Name>Description/Synopsis</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{5bbb974b-d50a-45de-bb40-f6d7fb36bfd8}" type="2" valueInterpretation="5"> 
             <ns:Name>Date Taken/Scanned</ns:Name> 
            </ns:Field> 
           </ns:Fields> 
          </ns:Layout> 
         </ns:Field> 
         <ns:Field uid="{04a4080f-fec0-4e01-822f-b9125c0b5ac9}" type="10" valueInterpretation="0"> 
          <ns:Name>User Comment Thread</ns:Name> 
          <ns:Layout tableName="AssetRecords/{04a4080f-fec0-4e01-822f-b9125c0b5ac9}"> 
           <ns:Fields> 
            <ns:Field uid="{dd48a259-8a55-46a6-b7cd-95a0335197e3}" type="5" valueInterpretation="0"> 
             <ns:Name>User Comment Coordinates</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{03504c8d-c809-461c-a62e-55a4bd6c1adf}" type="10" valueInterpretation="0"> 
             <ns:Name>User Comment</ns:Name> 
             <ns:Layout tableName="AssetRecords/{04a4080f-fec0-4e01-822f-b9125c0b5ac9}/{03504c8d-c809-461c-a62e-55a4bd6c1adf}"> 
              <ns:Fields> 
               <ns:Field uid="{af4b2e46-5f6a-11d2-8f20-0000c0e166dc}" type="0" valueInterpretation="0"> 
                <ns:Name>Comments</ns:Name> 
               </ns:Field> 
               <ns:Field uid="{340f81ff-bef4-4967-b5eb-da1db00b73c6}" type="4" valueInterpretation="0"> 
                <ns:Name>Modification Date</ns:Name> 
               </ns:Field> 
               <ns:Field uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}" type="2" valueInterpretation="0"> 
                <ns:Name>Host Item ID</ns:Name> 
               </ns:Field> 
               <ns:Field uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}" type="2" valueInterpretation="0"> 
                <ns:Name>ID</ns:Name> 
               </ns:Field> 
               <ns:Field uid="{d332e5f9-980a-4685-bdd1-235635ac7f2f}" type="2" valueInterpretation="0"> 
                <ns:Name>Replied On</ns:Name> 
               </ns:Field> 
               <ns:Field uid="{da7fd65c-ea26-49f8-b7b8-a6871727d0bb}" type="0" valueInterpretation="10"> 
                <ns:Name>User</ns:Name> 
               </ns:Field> 
              </ns:Fields> 
             </ns:Layout> 
            </ns:Field> 
            <ns:Field uid="{228051ee-4983-462b-84e8-3644a14c0d52}" type="2" valueInterpretation="0"> 
             <ns:Name>Page Number</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{d9bbc910-bae3-4862-97aa-b3ddb8bebb06}" type="4" valueInterpretation="0"> 
             <ns:Name>Creation Date</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}" type="2" valueInterpretation="0"> 
             <ns:Name>ID</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}" type="2" valueInterpretation="0"> 
             <ns:Name>Host Item ID</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{da7fd65c-ea26-49f8-b7b8-a6871727d0bb}" type="0" valueInterpretation="10"> 
             <ns:Name>User</ns:Name> 
            </ns:Field> 
            <ns:Field uid="{cf84d248-60b6-4fe1-a8f1-a0d91c307b0a}" type="7" valueInterpretation="0"> 
             <ns:Name>User Comment Type</ns:Name> 
            </ns:Field> 
           </ns:Fields> 
          </ns:Layout> 
         </ns:Field> 
         <ns:Field uid="{af4b2e00-5f6a-11d2-8f20-0000c0e166dc}" type="0" valueInterpretation="0"> 
          <ns:Name>Record Name</ns:Name> 
         </ns:Field> 
         <ns:Field uid="{6060d669-a2ff-4284-af2e-4c6762139ea1}" type="7" valueInterpretation="7"> 
          <ns:Name>Test multi-select string list</ns:Name> 
         </ns:Field> 
         <ns:Field uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}" type="0" valueInterpretation="0"> 
          <ns:Name>Categories</ns:Name> 
         </ns:Field> 
        </ns:Fields> 
    </ns:Layout> 
    <ns:Items> 
        <ns:Item catalogid="3" id="1"> 
         <ns:FieldValue uid="{00a3b951-4c7b-4751-90c0-c88cf0eb4983}"> 
          <ns:Items> 
           <ns:Item catalogid="3" id="1"> 
            <ns:FieldValue uid="{86b3bf92-e7cc-4150-bd74-191ce4bf9374}">table access number test</ns:FieldValue> 
            <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">1</ns:FieldValue> 
            <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">1</ns:FieldValue> 
            <ns:FieldValue uid="{8322d5e0-edc9-4c2a-9991-702c376d9edc}">table decription test</ns:FieldValue> 
            <ns:FieldValue uid="{5bbb974b-d50a-45de-bb40-f6d7fb36bfd8}" displayValue="12-Jan-1967">2049007148</ns:FieldValue> 
           </ns:Item> 
           <ns:Item catalogid="3" id="12"> 
            <ns:FieldValue uid="{86b3bf92-e7cc-4150-bd74-191ce4bf9374}">789-123</ns:FieldValue> 
            <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">1</ns:FieldValue> 
            <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">12</ns:FieldValue> 
            <ns:FieldValue uid="{8322d5e0-edc9-4c2a-9991-702c376d9edc}">data entered using Web Client in IE7</ns:FieldValue> 
            <ns:FieldValue uid="{5bbb974b-d50a-45de-bb40-f6d7fb36bfd8}" displayValue="31-Oct-1977">2049012575</ns:FieldValue> 
           </ns:Item> 
          </ns:Items> 
         </ns:FieldValue> 
         <ns:FieldValue uid="{04a4080f-fec0-4e01-822f-b9125c0b5ac9}"> 
          <ns:Items> 
           <ns:Item catalogid="3" id="6"> 
            <ns:FieldValue uid="{dd48a259-8a55-46a6-b7cd-95a0335197e3}">7265636f00000008000000084154505944626c653fc6d5ef2c783013000000084154505844626c653fb3d4bb7e327a97000000084142505844626c653fd33ae45b57bcb2000000084142505944626c653fcd12073615a24000000004455450584c6f6e670000002800000004455450594c6f6e670000012600000004454250584c6f6e67000001ee00000004454250594c6f6e6700000122</ns:FieldValue> 
            <ns:FieldValue uid="{03504c8d-c809-461c-a62e-55a4bd6c1adf}"> 
             <ns:Items> 
              <ns:Item catalogid="3" id="6"> 
               <ns:FieldValue uid="{af4b2e46-5f6a-11d2-8f20-0000c0e166dc}">Crop this part</ns:FieldValue> 
               <ns:FieldValue uid="{340f81ff-bef4-4967-b5eb-da1db00b73c6}" displayValue="2011-04-25T20:03:51+08:00">1303733031000</ns:FieldValue> 
               <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">6</ns:FieldValue> 
               <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">6</ns:FieldValue> 
               <ns:FieldValue uid="{da7fd65c-ea26-49f8-b7b8-a6871727d0bb}">U:{98ca1422-0171-4d1d-8b84-8cdda4ab70ae}:testsuperadmin</ns:FieldValue> 
              </ns:Item> 
             </ns:Items> 
            </ns:FieldValue> 
            <ns:FieldValue uid="{d9bbc910-bae3-4862-97aa-b3ddb8bebb06}" displayValue="2011-04-25T20:03:40+08:00">1303733020000</ns:FieldValue> 
            <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">6</ns:FieldValue> 
            <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">1</ns:FieldValue> 
            <ns:FieldValue uid="{da7fd65c-ea26-49f8-b7b8-a6871727d0bb}">U:{98ca1422-0171-4d1d-8b84-8cdda4ab70ae}:testsuperadmin</ns:FieldValue> 
            <ns:FieldValue uid="{cf84d248-60b6-4fe1-a8f1-a0d91c307b0a}"> 
             <ns:EnumValue id="1">Rectangle</ns:EnumValue> 
            </ns:FieldValue> 
           </ns:Item> 
           <ns:Item catalogid="3" id="7"> 
            <ns:FieldValue uid="{dd48a259-8a55-46a6-b7cd-95a0335197e3}">7265636f00000006000000084154505944626c653fe1a70f9fd98a37000000084154505844626c653fdf6fc64f52edf900000004455450584c6f6e67000000be00000004455450594c6f6e670000024d00000004454250584c6f6e67000002f800000004454250594c6f6e67000000fc</ns:FieldValue> 
            <ns:FieldValue uid="{03504c8d-c809-461c-a62e-55a4bd6c1adf}"> 
             <ns:Items> 
              <ns:Item catalogid="3" id="7"> 
               <ns:FieldValue uid="{af4b2e46-5f6a-11d2-8f20-0000c0e166dc}">Remove this spot</ns:FieldValue> 
               <ns:FieldValue uid="{340f81ff-bef4-4967-b5eb-da1db00b73c6}" displayValue="2011-04-25T20:04:34+08:00">1303733074000</ns:FieldValue> 
               <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">7</ns:FieldValue> 
               <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">7</ns:FieldValue> 
               <ns:FieldValue uid="{da7fd65c-ea26-49f8-b7b8-a6871727d0bb}">U:{98ca1422-0171-4d1d-8b84-8cdda4ab70ae}:testsuperadmin</ns:FieldValue> 
              </ns:Item> 
             </ns:Items> 
            </ns:FieldValue> 
            <ns:FieldValue uid="{d9bbc910-bae3-4862-97aa-b3ddb8bebb06}" displayValue="2011-04-25T20:04:09+08:00">1303733049000</ns:FieldValue> 
            <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">7</ns:FieldValue> 
            <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">1</ns:FieldValue> 
            <ns:FieldValue uid="{da7fd65c-ea26-49f8-b7b8-a6871727d0bb}">U:{98ca1422-0171-4d1d-8b84-8cdda4ab70ae}:testsuperadmin</ns:FieldValue> 
            <ns:FieldValue uid="{cf84d248-60b6-4fe1-a8f1-a0d91c307b0a}"> 
             <ns:EnumValue id="0">Icon</ns:EnumValue> 
            </ns:FieldValue> 
           </ns:Item> 
          </ns:Items> 
         </ns:FieldValue> 
         <ns:FieldValue uid="{af4b2e00-5f6a-11d2-8f20-0000c0e166dc}">890-ppm.jpg</ns:FieldValue> 
         <ns:FieldValue uid="{6060d669-a2ff-4284-af2e-4c6762139ea1}"> 
          <ns:EnumValue id="0">Item A</ns:EnumValue> 
          <ns:EnumValue id="1">Item B</ns:EnumValue> 
          <ns:EnumValue id="3">Item D</ns:EnumValue> 
         </ns:FieldValue> 
         <ns:FieldValue uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}"> 
          <ns:CategoryValue>$Categories:Artifacts:Daily Life Item</ns:CategoryValue> 
          <ns:CategoryValue>$Categories:Images:Objects</ns:CategoryValue> 
         </ns:FieldValue> 
        </ns:Item> 
        <ns:Item catalogid="3" id="2"> 
         <ns:FieldValue uid="{00a3b951-4c7b-4751-90c0-c88cf0eb4983}"> 
          <ns:Items> 
           <ns:Item catalogid="3" id="13"> 
            <ns:FieldValue uid="{86b3bf92-e7cc-4150-bd74-191ce4bf9374}">12345-6789</ns:FieldValue> 
            <ns:FieldValue uid="{e709c047-7fca-4081-9c4b-41fb70bf31f4}">2</ns:FieldValue> 
            <ns:FieldValue uid="{c02adb31-5c2c-4014-b86a-a53cf83f7e6c}">13</ns:FieldValue> 
            <ns:FieldValue uid="{8322d5e0-edc9-4c2a-9991-702c376d9edc}">Test 2nd level description field</ns:FieldValue> 
            <ns:FieldValue uid="{5bbb974b-d50a-45de-bb40-f6d7fb36bfd8}" displayValue="31-Mar-2011">2049029759</ns:FieldValue> 
           </ns:Item> 
          </ns:Items> 
         </ns:FieldValue> 
         <ns:FieldValue uid="{af4b2e00-5f6a-11d2-8f20-0000c0e166dc}">2002-4-scrimshaw2001-128-10.jpg</ns:FieldValue> 
         <ns:FieldValue uid="{6060d669-a2ff-4284-af2e-4c6762139ea1}"> 
          <ns:EnumValue id="4">Item E</ns:EnumValue> 
          <ns:EnumValue id="0">Item A</ns:EnumValue> 
          <ns:EnumValue id="2">Item C</ns:EnumValue> 
         </ns:FieldValue> 
         <ns:FieldValue uid="{af4b2e0c-5f6a-11d2-8f20-0000c0e166dc}"> 
          <ns:CategoryValue>$Categories:Artifacts:Personal Artefact</ns:CategoryValue> 
          <ns:CategoryValue>$Categories:Artifacts:Daily Life Item</ns:CategoryValue> 
          <ns:CategoryValue>$Categories:Images:Objects</ns:CategoryValue> 
         </ns:FieldValue> 
        </ns:Item> 
    </ns:Items> 
    </ns:Export> 
    

    내가 개선하기를 좋아하는 세 가지 영역이 있습니다.

    1. 이전에는 카테고리 필드에만 여러 값이 있습니다. 이제 다른 필드도 다중 값을 가질 수 있습니다. 이 예제에서 필드 이름은 입니다. 다중 선택 문자열 목록 테스트

    2. 다중 값을 다른 열로 분리하는 대신 값 사이에 구분 기호를 삽입하십시오. 사용 | 또는 우리가 정의 할 수있는 다른 문자

    3. 위에서 볼 수 있듯이 테스트 테이블 필드와 사용자 코멘트 스레드라는 두 개의 다중 레벨 필드가 있습니다.개선 된 XSLT 26 년 4 월 출원

    편집의 유형을 처리 할 수있는 희망 2011

    내가 ns의 마지막 3 템플릿을 복제하고 이름을 변경하여 성공적으로이 문제를 해결 한
    1. : CategoryValue을 NS에 : EnumValue

    2. 솔루션이 작동합니다. 감사!

    3. 미안하지만 분명히 설명하지 못했습니다. 난 단지 다단계 필드와 데이터가 나머지 필드와 같이 변형 될 필요가 있습니다. 즉, 한 필드에 대해 하나의 열입니다. 나는이 시도 자신의 중첩 관계

  • +2

    답변을 빨리 받으려면 원하는 결과를 텍스트로 제공해야합니다. 많은 사람들이 xls 자료를 파고 들지 않을 것입니다. 예 : 테스트 할 Excel이 없습니다. 그리고 모든 솔루션을 테스트합니다. – Flack

    +0

    중요한 것을 잊어 버렸습니다 : 주어진 XML 파일에 대해 원하는 정확한 텍스트 결과를 제공하십시오. –

    답변

    3

    걱정하지 않는다 :

    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:ns="http://www.canto.com/ns/Export/1.0" 
        xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
        <xsl:output method="text" indent="yes" encoding="utf-8" standalone="yes"/> 
        <xsl:strip-space elements="*"/> 
    
        <!-- Parameterized separator/end of line characters for flexibility --> 
        <xsl:param name="sep" select="'&#09;'" /> 
        <xsl:param name="eol" select="'&#10;'" /> 
        <xsl:param name="listsep" select="'|'" /> 
    
        <!-- On matching the root node, output a list of field names, followed by the items --> 
        <xsl:template match="/ns:Export"> 
        <xsl:apply-templates select="ns:Layout/ns:Fields/ns:Field" /> 
        <xsl:apply-templates select="ns:Items/ns:Item"/> 
        </xsl:template> 
    
        <!-- On matching all but the last field name, output the name followed by separator --> 
        <xsl:template match="ns:Field[position()!=last()]"> 
        <xsl:value-of select="concat(normalize-space(ns:Name),$sep)" /> 
        </xsl:template> 
    
        <!-- On matching the last field name, output the name followed by a newline --> 
        <xsl:template match="ns:Field[position()=last()]"> 
        <xsl:value-of select="concat(normalize-space(ns:Name),$eol)" /> 
        </xsl:template> 
    
        <!-- On matching an item, iterate through each field, applying templates to any 'ns:FieldValue' nodes that share the same value of @uid --> 
        <xsl:template match="ns:Item"> 
        <xsl:variable name="item" select="." /> 
        <xsl:for-each select="/ns:Export/ns:Layout/ns:Fields/ns:Field/@uid"> 
         <xsl:apply-templates select="$item/ns:FieldValue[@uid=current()]" /> 
         <xsl:if test="position()!=last()"> 
         <xsl:value-of select="$sep" /> 
         </xsl:if> 
        </xsl:for-each> 
        <xsl:value-of select="$eol" /> 
        </xsl:template> 
    
        <!-- On matching a field value, output the content. --> 
        <xsl:template match="ns:FieldValue"> 
        <xsl:value-of select="normalize-space(.)" /> 
        </xsl:template> 
    
        <!-- on matching a field value with a @displayValue attribute, output the value of that attribute --> 
        <xsl:template match="ns:FieldValue[@displayValue]"> 
        <xsl:value-of select="normalize-space(@displayValue)" /> 
        </xsl:template> 
    
        <!-- On matching a field value with ns:CategoryValue children, apply templates on those children. --> 
        <xsl:template match="ns:FieldValue[ns:CategoryValue]"> 
        <xsl:apply-templates select="ns:CategoryValue" /> 
        </xsl:template> 
    
        <!-- On matching a category value, output it's content, plus a separator. --> 
        <xsl:template match="ns:CategoryValue"> 
        <xsl:value-of select="concat(normalize-space(.),$listsep)" /> 
        </xsl:template> 
    
        <!-- On matching the last category value, output it's content without a separator. --> 
        <xsl:template match="ns:CategoryValue[position()=last()]"> 
        <xsl:value-of select="normalize-space(.)" /> 
        </xsl:template> 
    </xsl:stylesheet> 
    

    을이 아마 XSLT를 사용하여 가장 효율적인 방법은 아니지만 비교적 간단합니다. 보시다시피 템플릿의 기본 설명을 주석에 포함 시켰습니다. 나는 당신이 개행 문자 (CR + LF 아니면 그냥 LF?)로 사용하고 있는지 모르겠지만, 지금은 LF를 사용하여 매개 변수화했다. 당신이 CR + LF를 사용해야하는 경우 <xsl:param name="eol" 라인 변경 :

    <xsl:param name="eol" select="'&#13;&#10;'" /> 
    

    ns:item 템플릿이 조금 까다로운을; 설명이 필요한지 알려주세요.

    편집 : 단일 필드의 값 목록에 대해 다른 구분 기호를 허용하고, 세 번째 매개 변수를 추가하고 기존 $sep 매개 변수 대신 두 번째 마지막 템플릿에서 사용하는 경우 매우 약간 수정했습니다.

    +0

    @ Flynn1179 : CSV 형식의 경우 다중 값 열은 따옴표로 묶어야한다고 생각합니다. –

    +0

    @Alejandro : OP는 카테고리가 별도의 열에 표시되도록 지정했습니다. – Flynn1179

    +0

    @ Flynn1179 : 네 말이 맞아. 이제 원하는 출력을 볼 수 있습니다 ** ** 멀티 컬럼에도 헤더 **가 있습니다 ... –

    관련 문제