Mani Pazhana
asked on
XSLT: Generate CSV file with .CSV extension
Hello,
I want to generate .csv file using XSLT.
I am getting .txt file using the below XSLT, i want .CSV file from the below XSLT...
Any idea how to do that?
Here is my XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:csv="csv:csv"
xmlns:msxsl="urn:schemas-m icrosoft-c om:xslt" exclude-result-prefixes="m sxsl">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:key name="kRequestId" match="/VCAResponse/Respon se" use="RequestId"/>
<!-- DL being used (Comma in this case) -->
<xsl:param name="DL" select="','"/>
<!-- Checking for carriage return -->
<xsl:param name="CR" select="'
'"/>
<xsl:strip-space elements="*"/>
<!-- Column Headers -->
<!--Create header row of element names
(All fields are sent to JDE that are in the CIM, single line per request details)-->
<!--
IssuerId
FileId
RequestId
Action
PurchaseId
Status
AVV
Expiry
PAN
ErrorCode
ErrorMessage
SupplierPaymentNotificatio nEMail
PurchaseSupplierNotificati onEMail
PurchaseSupplierNotificati onAutoSend
-->
<xsl:variable name="headers" >
<headers>IssuerId</headers > <!-- 1 -->
<headers>FileId</headers> <!-- 2 -->
<headers>RequestId</header s> <!-- 3 -->
<headers>Action</headers> <!-- 4 -->
<headers>PurchaseId</heade rs> <!-- 5 -->
<headers>Status</headers> <!-- 6 -->
<headers>AVV</headers> <!-- 7 -->
<headers>Expiry</headers> <!-- 8 -->
<headers>PAN</headers> <!-- 9 -->
<headers>ErrorCode</header s> <!-- 10 -->
<headers>ErrorMessage</hea ders> <!-- 11 -->
<headers>SupplierPaymentNo tification EMail</hea ders> <!-- 12 -->
<headers>PurchaseSupplierN otificatio nEMail</he aders> <!-- 13 -->
<headers>PurchaseSupplierN otificatio nAutoSend< /headers> <!-- 14 -->
</xsl:variable>
<xsl:variable name="columns" >
<columns>IssuerId</columns > <!-- 1 -->
<columns>FileId</columns> <!-- 2 -->
<columns>RequestId</column s> <!-- 3 -->
<columns>Action</columns> <!-- 4 -->
<columns>PurchaseId</colum ns> <!-- 5 -->
<columns>Status</columns> <!-- 6 -->
<columns>AVV</columns> <!-- 7 -->
<columns>Expiry</columns> <!-- 8 -->
<columns>PAN</columns> <!-- 9 -->
<columns>ErrorCode</column s> <!-- 10 -->
<columns>ErrorMessage</col umns> <!-- 11 -->
<columns>SupplierPaymentNo tification EMail</col umns> <!-- 12-->
<columns>PurchaseSupplierN otificatio nEMail</co lumns> <!-- 13 -->
<columns>PurchaseSupplierN otificatio nAutoSend< /columns> <!-- 14 -->
</xsl:variable>
<!--Invoice hierarchy structure of Invoice/InvoiceLineItemDet ail is flattened into a single line per InvoiceLineItemDetail-->
<xsl:template match="/">
<!--Create header row of attribute names-->
<xsl:for-each select="msxsl:node-set($he aders)/hea ders">
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="position() != last()">
<xsl:value-of select="$DL"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$CR"/>
<xsl:for-each select="/*/*">
<xsl:variable name="NodeName" select="name(current())"/>
<!-- If node is Response, get the values based on their element name (from the columns above -->
<xsl:if test="$NodeName = 'Response'">
<xsl:variable name="property" select="ancestor-or-self:: node()|des cendant::n ode()"/>
<xsl:for-each select="msxsl:node-set($co lumns)/col umns">
<!-- Extract the column name and value -->
<xsl:variable name="column" select="."/>
<xsl:variable name="value" select="$property/*[name() = $column]"/>
<xsl:text>"</xsl:text>
<xsl:value-of select="$value" disable-output-escaping="y es"/>
<xsl:text>"</xsl:text>
<xsl:if test="position() != last()">
<xsl:value-of select="$DL"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$CR"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Thanks
I want to generate .csv file using XSLT.
I am getting .txt file using the below XSLT, i want .CSV file from the below XSLT...
Any idea how to do that?
Here is my XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:csv="csv:csv"
xmlns:msxsl="urn:schemas-m
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:key name="kRequestId" match="/VCAResponse/Respon
<!-- DL being used (Comma in this case) -->
<xsl:param name="DL" select="','"/>
<!-- Checking for carriage return -->
<xsl:param name="CR" select="'
'"/>
<xsl:strip-space elements="*"/>
<!-- Column Headers -->
<!--Create header row of element names
(All fields are sent to JDE that are in the CIM, single line per request details)-->
<!--
IssuerId
FileId
RequestId
Action
PurchaseId
Status
AVV
Expiry
PAN
ErrorCode
ErrorMessage
SupplierPaymentNotificatio
PurchaseSupplierNotificati
PurchaseSupplierNotificati
-->
<xsl:variable name="headers" >
<headers>IssuerId</headers
<headers>FileId</headers> <!-- 2 -->
<headers>RequestId</header
<headers>Action</headers> <!-- 4 -->
<headers>PurchaseId</heade
<headers>Status</headers> <!-- 6 -->
<headers>AVV</headers> <!-- 7 -->
<headers>Expiry</headers> <!-- 8 -->
<headers>PAN</headers> <!-- 9 -->
<headers>ErrorCode</header
<headers>ErrorMessage</hea
<headers>SupplierPaymentNo
<headers>PurchaseSupplierN
<headers>PurchaseSupplierN
</xsl:variable>
<xsl:variable name="columns" >
<columns>IssuerId</columns
<columns>FileId</columns> <!-- 2 -->
<columns>RequestId</column
<columns>Action</columns> <!-- 4 -->
<columns>PurchaseId</colum
<columns>Status</columns> <!-- 6 -->
<columns>AVV</columns> <!-- 7 -->
<columns>Expiry</columns> <!-- 8 -->
<columns>PAN</columns> <!-- 9 -->
<columns>ErrorCode</column
<columns>ErrorMessage</col
<columns>SupplierPaymentNo
<columns>PurchaseSupplierN
<columns>PurchaseSupplierN
</xsl:variable>
<!--Invoice hierarchy structure of Invoice/InvoiceLineItemDet
<xsl:template match="/">
<!--Create header row of attribute names-->
<xsl:for-each select="msxsl:node-set($he
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="position() != last()">
<xsl:value-of select="$DL"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$CR"/>
<xsl:for-each select="/*/*">
<xsl:variable name="NodeName" select="name(current())"/>
<!-- If node is Response, get the values based on their element name (from the columns above -->
<xsl:if test="$NodeName = 'Response'">
<xsl:variable name="property" select="ancestor-or-self::
<xsl:for-each select="msxsl:node-set($co
<!-- Extract the column name and value -->
<xsl:variable name="column" select="."/>
<xsl:variable name="value" select="$property/*[name()
<xsl:text>"</xsl:text>
<xsl:value-of select="$value" disable-output-escaping="y
<xsl:text>"</xsl:text>
<xsl:if test="position() != last()">
<xsl:value-of select="$DL"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$CR"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks
ASKER