2009-12-23 6 views
1

J'utilise SSIS sur SQL Server 2005, VS 2005 SP2.Transformation SSIS XSLT

J'ai créé un XSLT pour convertir le format XML au format CSV. Quand je lance ceci via XML Spy ça fonctionne bien. J'ai configuré un package XML Task within et SSIS pour transformer le fichier XML. Malheureusement, lorsque SSIS effectue la transformation, il n'inclut pas le CR/LF à la fin de chaque enregistrement - il me reste une ligne sigle.

J'ai passé le XSLT ci-dessous. Quelqu'un pourrait-il me dire pourquoi SSIS ignore le ?

J'ai également collé un exemple de document XML.

Merci beaucoup,

Rob.

<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:template match="/pptxn"> 
     <xsl:variable name="fileName" select="/pptxn/file_name"/> 
     <xsl:variable name="sendingOrg" select="/pptxn/sending_org"/> 
     <xsl:variable name="dateCreated" select="/pptxn/date_created"/> 
     <xsl:variable name="timeCreated" select="/pptxn/time_created"/> 
     <xsl:variable name="sequenceNumber" select="/pptxn/sequence_number"/> 
     <xsl:text>FileName,SendingOrg,DateCreated,TimeCreated,SequenceNumber,PartnerNumber,PartnerOutletRef,CardAccountNumber,TransactionDate,TransactionTime,Spend,PartnerPoints,PartnerReference,PartnerPosId</xsl:text> 
    <xsl:text>&#xD;</xsl:text> 
     <xsl:for-each select="transaction"> 
      <xsl:value-of select="$fileName"/>,<xsl:value-of select="$sendingOrg"/>,<xsl:value-of select="$dateCreated"/>,<xsl:value-of select="$timeCreated"/>,<xsl:value-of select="$sequenceNumber"/>,<xsl:value-of select="partner_number"/>,<xsl:value-of select="partner_outlet_ref"/>,<xsl:value-of select="card_account_number"/>,<xsl:value-of select="transaction_date"/>,<xsl:value-of select="transaction_time"/>,<xsl:value-of select="spend"/>,<xsl:value-of select="partner_points"/>,<xsl:value-of select="partner_reference"/>,<xsl:value-of select="partner_pos_id"/> 
      <xsl:text>&#xD;</xsl:text> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

Maintenant XML ->

<?xml version="1.0" encoding="UTF-8"?> 
<pptxn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Y:\PartnerPoints\XML\PointsPartnerRequest.xsd"> 
    <file_name>PPRequest.xml</file_name> 
    <sending_org>1</sending_org> 
    <date_created>20091121</date_created> 
    <time_created>153421</time_created> 
    <sequence_number>2</sequence_number> 
    <transaction_count>3</transaction_count> 
    <transaction> 
     <partner_number>1</partner_number> 
     <partner_outlet_ref>outlet ref 1</partner_outlet_ref> 
     <card_account_number>1</card_account_number> 
     <transaction_date>20091221</transaction_date> 
     <transaction_time>091256</transaction_time> 
     <spend>21.34</spend> 
     <partner_points>40</partner_points> 
     <partner_reference>shop x1</partner_reference> 
     <partner_pos_id>pos id 1</partner_pos_id> 
    </transaction> 
    <transaction> 
     <partner_number>2</partner_number> 
     <partner_outlet_ref>outlet ref 2</partner_outlet_ref> 
     <card_account_number>2</card_account_number> 
     <transaction_date>20091222</transaction_date> 
     <transaction_time>091257</transaction_time> 
     <spend>21.35</spend> 
     <partner_points>41</partner_points> 
     <partner_reference>shop x2</partner_reference> 
     <partner_pos_id>pos id 2</partner_pos_id> 
    </transaction> 
     <transaction> 
     <partner_number>3</partner_number> 
     <partner_outlet_ref>outlet ref 3</partner_outlet_ref> 
     <card_account_number>3</card_account_number> 
     <transaction_date>20091223</transaction_date> 
     <transaction_time>091258</transaction_time> 
     <spend>21.36</spend> 
     <partner_points>42</partner_points> 
     <partner_reference>shop x3</partner_reference> 
     <partner_pos_id>pos id 3</partner_pos_id> 
    </transaction> 
</pptxn> 

Répondre

2

J'ai changé le code char de hexadécimal en décimal et maintenant cela fonctionne sur SSIS 2005 :)

<xsl:text>&#13;&#10;</xsl:text> 

très étrange ...

+0

Je peux confirmer que votre suggestion résout un problème similaire à celui que j'avais et, en fait, ce comportement étrange existe toujours dans SSIS 2012! – 3Sphere

2

Vous devrez peut-être changer

<xsl:text>&#xD;</xsl:text> 

à

<xsl:text>&#xD;&#xA;</xsl:text> 
+0

Merci pour la suggestion, mais je crains que n'a eu aucun effet :( –

+0

Qu'en est-il en utilisant seulement ? – brianary

+0

Non, ça ne marche pas non plus. Comme un test, j'ai également changé le en orignal. Cela a été écrit dans le fichier CSV cible comme prévu. Il semble que SSIS 2005 ne produira tout simplement pas le . J'ai également essayé le "ProcessXMLData Sample" de codeplex. Ce travail fonctionne bien sur SSIS 2008. Lorsque je copie le code dans un nouveau package SSIS 2005, j'obtiens le même problème, un CSV de sortie sur une seule ligne. –

Questions connexes