2011-03-15 44 views
1

我有使用XSLT转换以输出csv格式文本的XML数据。我的XSLT包含一个<xsl:if test>子句,用于过滤来自输入XML的较大数据集的结果。这可以工作,但从输入中筛选出的每一行在输出中显示为空行。 我试过<xsl:strip-space elements="*" /><xsl:template match="text()" />,但都没有删除空行。如何将XSLT中的空行删除为CSV输出

我的XML的样品:

<?xml version="1.0" encoding="UTF-8"?> 
<session_list xmlns="http://www.networkstreaming.com/namespaces/API" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <session lsid="fef672741e025ffda1acb3041f09252d"> 
    <session_type>support</session_type> 
    <lseq>2899</lseq> 
    <start_time timestamp="1290027608">2010-11-17T16:00:08-05:00</start_time> 
    <end_time timestamp="1290027616">2010-11-17T16:00:16-05:00</end_time> 
    <duration>00:00:08</duration> 

    <public_site id="1">Default</public_site> 
    <external_key></external_key> 
    <session_chat_view_url>https://mysite.com/session_download.ns?lsid=l%3Dfef672741e025ffda1acb3041f09252d%3Bh%3D9bd6081f0b7fee08dcc32a58ef4cb54c7a0e233d%3Bt%3Dsd%3Bm%3Dchat&amp;dl_action=chat&amp;view=1&amp;sessionType=sd</session_chat_view_url> 
    <session_chat_download_url>https://mysite.com/session_download.ns?lsid=l%3Dfef672741e025ffda1acb3041f09252d%3Bh%3D9bd6081f0b7fee08dcc32a58ef4cb54c7a0e233d%3Bt%3Dsd%3Bm%3Dchat&amp;dl_action=chat&amp;sessionType=sd</session_chat_download_url> 
    <file_transfer_count>0</file_transfer_count> 

    <primary_customer gsnumber="3">Smith, John</primary_customer> 
    <customer_list> 
    <customer gsnumber="3"> 
    <username>Smith, John</username> 
    <public_ip>xxx.xxx.xxx.xxx</public_ip> 
    <private_ip>xxx.xxx.xxx.xxx</private_ip> 
    <hostname>DESKTOP</hostname> 

    <os>Windows 7 Enterprise x64 Edition (Build 7600)</os> 
    <primary_cust>1</primary_cust> 
     <info> 
     <name></name> 
     <company></company> 
     <company_code></company_code> 
     <issue></issue> 
     <details></details> 
     </info> 
    </customer> 
    </customer_list> 
    ...etc... 
</session> 
</session_list> 

我的XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bg="http://www.networkstreaming.com/namespaces/API" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<xsl:output method="text"/> 
<xsl:template match="/*"> 
<xsl:text>Session ID,</xsl:text> 
<xsl:text>Start Time,</xsl:text> 
<xsl:text>Duration,</xsl:text> 
<xsl:text>Public Site,</xsl:text> 
<xsl:text>Remedy Ticket Number,</xsl:text> 
<xsl:text>Customer's Name,</xsl:text> 
<xsl:text>Customer's Operating System,</xsl:text> 
<xsl:text>Representative's Name</xsl:text> 
<xsl:text>&#xD;</xsl:text> 
<xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="bg:session_list"> 
<xsl:apply-templates select="bg:session"/> 
</xsl:template> 

<xsl:template match="bg:session"> 
<xsl:if test="contains(bg:customer_list/bg:customer/bg:os,'Click-To-Chat')"> 
<xsl:value-of select="bg:lseq"/>,<xsl:text/> 
<xsl:value-of select="bg:start_time"/>,<xsl:text/> 
<xsl:value-of select="bg:duration"/>,<xsl:text/> 
<xsl:value-of select="bg:public_site"/>,<xsl:text/> 
<xsl:value-of select="bg:external_key"/>,<xsl:text/> 
<xsl:value-of select="bg:primary_customer"/>,<xsl:text/> 
<xsl:value-of select="bg:customer_list/bg:customer/bg:os"/>,<xsl:text/> 
<xsl:value-of select="bg:primary_rep"/> 
</xsl:if> 
<xsl:text>&#xD;</xsl:text> 
</xsl:template> 
</xsl:stylesheet> 

输出的样品:

Session ID,Start Time,Duration,Public Site,Remedy Ticket Number,Customer's Name,Customer's Operating System,Representative's Name 

6488,2011-03-14T09:17:13-04:00,00:00:06,Default,,User One,Windows® (x86) Click-To-Chat,Rep1 
6489,2011-03-14T09:44:50-04:00,00:39:58,Default,,Nate,Windows® (x86) Click-To-Chat,Rep1 




6494,2011-03-14T10:25:23-04:00,00:03:29,Default,,User TEST,Windows® (x86) Click-To-Chat,Rep1 



6498,2011-03-14T11:01:36-04:00,,Default,,User Two,Windows® (x86) Click-To-Chat,Diane 

每个打印行之间的行的是数据由于未通过<xsl:if test="contains(bg:customer_list/bg:customer/bg:os,'Click-To-Chat')">而被过滤掉,但空行仍在打印。在excel中打开时,此输出看起来不太好。

有没有人有任何想法如何删除它们?

谢谢!

回答

2

你有没有试过把<xsl:text>&#xD;</xsl:text>行放入xsl:if?这是放一个换行符的位,所以现在你正在编写一个,即使你不写行。

+0

+1正确答案。 – 2011-03-15 17:25:24

+0

非常感谢乔恩,它做到了。不知道我在想什么。 – runaboutfence 2011-03-15 17:56:56