我有以下的XML文件(爲了說明的目的,我在這裏削減了XML和XSLT;在真正的XML文檔中,還有更多的數據I關心,還有很多更多的,我不關心,而且通常有十幾<Document>
標籤的順序,並非僅此二人在這裏):從XML轉換爲帶有XSLT 1.0的CSV,變空行
<DocumentList>
<Document>
<SerialNumber>74631225</SerialNumber>
<MailRoomDate>2011-12-27-05:00</MailRoomDate>
<DocumentTypeCode>URC</DocumentTypeCode>
</Document>
<Document>
<SerialNumber>74631225</SerialNumber>
<MailRoomDate>2011-12-19-05:00</MailRoomDate>
<DocumentTypeCode>IPC</DocumentTypeCode>
</Document>
</DocumentList>
我希望把它變成以逗號分隔的值,每個文檔前後都帶有分隔符行(分別爲BeginRepeatedField和EndRepeatedField),如下所示:
BeginRepeatedField,"Document"
ApplicationNumber,"74631225"
MailRoomDate,"2011-12-27-05:00"
DocumentTypeCode,"URC"
EndRepeatedField,"Document"
BeginRepeatedField,"Document"
ApplicationNumber,"74631225"
MailRoomDate,"2011-12-19-05:00"
DocumentTypeCode,"IPC"
EndRepeatedField,"Document"
這裏是我的嘗試:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" />
<xsl:strip-space elements="*"/>
<xsl:variable name='NL'><xsl:text> </xsl:text></xsl:variable><!-- NL = newline character X'0A' -->
<xsl:template match="Document">
BeginRepeatedField,"Document"<xsl:text/>
ApplicationNumber,"<xsl:value-of select="normalize-space(SerialNumber)"/>"<xsl:text/>
MailRoomDate,"<xsl:value-of select="normalize-space(MailRoomDate)"/>"<xsl:text/>
DocumentTypeCode,"<xsl:value-of select="normalize-space(DocumentTypeCode)"/>"<xsl:text/>
EndRepeatedField,"Document"<xsl:text/>
</xsl:template>
</xsl:stylesheet>
當我使用,我得到的文件的開頭的額外的空行。現在,我問了一個類似的問題在相似背景而回 - One pesky blank line in an XSLT transform - 和運用我學到的東西在那裏,我的模板改變了第一線與<xsl:text/>
先於:
<xsl:text/>BeginRepeatedField,"Document"<xsl:text/>
而這也得到擺脫空白線;然而,當我這樣做,從第一個文件關閉定界符線,並從第二個文檔打開定界符得到級聯:
EndRepeatedField,"Document"BeginRepeatedField,"Document"
我可以避開是通過從最後一行除去<xsl:text/>
模板的結尾:
EndRepeatedField,"Document"
或通過顯式添加新行:
EndRepeatedField,"Document"<xsl:text/><xsl:value-of select='$NL' />
而且,我在這兩種情況下,我沒有在文件頂部找到空行,並且我沒有得到那種不需要的連接。但現在我在文件的結尾處得到空行。
我試過的一切都讓我留下了一個不需要的空白行(無論是在頂部還是在底部),否則就會產生不必要的連接。任何解決方案例如,任何方式有條件地除了第一個<Document>
之外全部添加新行?
不幸的是,這仍然會產生連接錯誤。 – codingatty
@codingatty您需要在文檔的末尾放置換行符。如果您不希望在最後一個換行符後面出現尾隨換行符,請有條件地執行 - 例如,請參閱:https://stackoverflow.com/questions/21529261/xsl-printing-linebreak-but-leave-out-last -line-break/21584607#21584607 –