2011-02-06 98 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> 

我想要的製表符分隔的文本輸出如下表就像當在Excel

https://lh5.googleusercontent.com/_Wsib_NwEZrA/TU6vzqbEGDI/AAAAAAAAAU0/V1SfGJyXJhQ/s800/2011-02-06_185321.png

開放我得到了XSLT文件做轉換。但是,它只能處理簡單,直接的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知識。希望有人能夠協助。感謝:-)

上編輯2011年4月25日

提供的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. 以前,只有Category字段有多個值。現在,其他領域也可以有多個值。在該示例中,字段名稱爲測試複選字符串列表

  2. 代替破多值到不同的列,例如值之間插入隔板使用|或其他一些我們可以定義的字符

  3. 可以看出,有兩個多級字段:測試表字段和用戶評論線程。希望改進的XSLT可以在4月26日處理此類申請

編輯的2011

  1. 我已經通過複製過去的3個模板和重命名NS成功地解決了這一點:的categoryValue至納秒:EnumValue

  2. 您的解決方案有效。謝謝!

  3. 對不起,我沒有解釋清楚。我只需要像其他字段一樣轉換所有多級字段和數據。也就是說,一個字段的一列。我不關心他們的嵌套關係

+2

如果你想更快得到答案,你應該提供所需的結果作爲文本。沒有多少人會深入xls的東西。例如。我只是沒有Excel來測試。我測試了我所有的解決方案。 – Flack 2011-02-06 12:52:06

+0

您已經忘記了一些重要的事情:請爲給定的XML文件提供您想要的確切文本結果。 – 2011-02-06 15:43:21

回答

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參數。

相關問題