Subject: RE: [xsl] Converting XML source to CSV output From: Mark Feblowitz <mfeblowitz@xxxxxxxxxxxxxxxx> Date: Thu, 20 Sep 2001 10:41:11 -0400 |
Perhaps an faq, but why is it that "concat" is used instead of merely outputting the text as encountered and letting the output stream act as a de facto concat? Mark Feblowitz > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of > Chris Pearson > Sent: 19 September 2001 19:41 > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Converting XML source to CSV output > > > Hi all. A novice question that I can't seem to locate a solution for > ... I have an XML source that I need to convert to a text delimited > file. > > The xml source is: > > <?xml version="1.0" encoding="UTF-8"?> > <DATA> > <HEADER> > <RECORD_A value="Header1 Record A" /> > <RECORD_B value="Header1 Record B" /> > <RECORD_n value="Header1 Record n" /> > </HEADER> > <BODY> > <BODY_RECORD_A value="Body1 Record A" /> > <BODY_RECORD_B value="Body1 Record B" /> > <BODY_RECORD_n value="Body1 Record n" /> > <DETAIL> > <DET_RECORD_A value="Detail1 Record A" /> > <DET_RECORD_B value="Detail1 Record B" /> > <DET_RECORD_n value="Detail1 Record n" /> > </DETAIL> > <DETAIL> > <DET_RECORD_A value="Detail2 Record A" /> > <DET_RECORD_B value="Detail2 Record B" /> > <DET_RECORD_n value="Detail2 Record n" /> > </DETAIL> > </BODY> > <BODY> > <BODY_RECORD_A value="Body2 Record A" /> > <BODY_RECORD_B value="Body2 Record B" /> > <BODY_RECORD_n value="Body2 Record n" /> > <DETAIL> > <DET_RECORD_A value="Detail3 Record A" /> > <DET_RECORD_B value="Detail3 Record B" /> > <DET_RECORD_n value="Detail3 Record n" /> > </DETAIL> > <DETAIL> > <DET_RECORD_A value="Detail4 Record A" /> > <DET_RECORD_B value="Detail4 Record B" /> > <DET_RECORD_n value="Detail4 Record n" /> > </DETAIL> > </BODY> > </DATA> > > +++++++++++++++++++++++++++++++++++++++++++ > > My stylesheet is: > > <?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" media-type="text/plain" /> > <xsl:strip-space elements="DATA HEADER BODY" /> > > <xsl:template match="DATA"> > <xsl:apply-templates /> > </xsl:template> > > <xsl:template match="HEADER"> > <xsl:variable name="rec1" select="RECORD_A/@value" /> > <xsl:variable name="rec2" select="RECORD_B/@value" /> > <xsl:variable name="recn" select="RECORD_n/@value" /> > <xsl:variable name="Head_Line" > select="concat ($rec1, ',', $rec2, ',', $recn, ',')" /> > <xsl:value-of select="$Head_Line" /> > <xsl:apply-templates /> > </xsl:template> > > <xsl:template match="BODY"> > <xsl:variable name="bodya" select="BODY_RECORD_A/@value" /> > <xsl:variable name="bodyb" select="BODY_RECORD_B/@value" /> > <xsl:variable name="bodyn" select="BODY_RECORD_n/@value" /> > <xsl:variable name="Body_Line" > select="concat ($bodya, ',', $bodyb, ',', $bodyn, ',')" /> > <xsl:value-of select="$Body_Line" /> > <xsl:apply-templates /> > </xsl:template> > > <xsl:template match="DETAIL"> > <xsl:variable name="deta" select="DET_RECORD_A/@value" /> > <xsl:variable name="detb" select="DET_RECORD_B/@value" /> > <xsl:variable name="detn" select="DET_RECORD_n/@value" /> > <xsl:variable name="Detail_Line" > select="concat ($deta, ',', $detb, ',', $detn)" /> > <xsl:value-of select="$Detail_Line" /> > <xsl:apply-templates /> > </xsl:template> > > </xsl:stylesheet> > > ++++++++++++++++++++++++++++++++++++++ > > And, my output is: > > Header1 Record A,Header1 Record B,Header1 Record n,Body1 > Record A,Body1 > Record B,Body1 Record n,Detail1 Record A,Detail1 Record > B,Detail1 Record > n > > > > Detail2 Record A,Detail2 Record B,Detail2 Record n > > > > Body2 Record A,Body2 Record B,Body2 Record n,Detail3 Record > A,Detail3 Record B,Detail3 Record n > > > > Detail4 Record A,Detail4 Record B,Detail4 Record n > > ++++++++++++++++++++++++++++++++++++++ > > What I want is: > > Header1 Record A,Header1 Record B,Header1 Record n,Body1 > Record A,Body1 > Record B,Body1 Record n,Detail1 Record A,Detail1 Record > B,Detail1 Record > n > Header1 Record A,Header1 Record B,Header1 Record n,Body1 > Record A,Body1 > Record B,Body1 Record n,Detail2 Record A,Detail2 Record > B,Detail2 Record > n > Header1 Record A,Header1 Record B,Header1 Record n,Body2 > Record A,Body2 > Record B,Body2 Record n,Detail3 Record A,Detail3 Record > B,Detail3 Record > n > Header1 Record A,Header1 Record B,Header1 Record n,Body2 > Record A,Body2 > Record B,Body2 Record n,Detail4 Record A,Detail4 Record > B,Detail4 Record > n > > I'm having 2 issues: > > 1) How to repeat the header (and Body data) for detail records > 2) How to format it without extra white space > > Is my approach flawed? Any and all suggestions, comments, > criticisms or > random postulations welcomed. Thanks in advance! > > Chris > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Converting XML source to , Michael Kay | Thread | Re: [xsl] Converting XML source to , Jeni Tennison |
RE: [xsl] grouping problem, Corey Spitzer | Date | [xsl] Tokenizing IDREFs, Stuart Brown |
Month |