tags:

views:

27

answers:

0

Hi All,

I am trying to convert xml to csv. I am facing problem to get child node (like ProdIDT, IDV) as one line a tab delimeted txt file. Child node value is coming close without header. Please look at the below my input and XSL file.

XML

<Product>
  <Record>1616200243</Record>
  <Not>03</Not>
  <ProductId>
    <ProdIDT>02</ProdIDT>
    <IDV>1616200243</IDV>
  </ProductId>
  <ProductId>
    <ProdIDT>03</ProdIDT>
    <IDV>9781616200244</IDV>
  </ProductId>
  <ProdFormDe>Electronic book text</ProdFormDe>
  <EpTy>000</EpTy>
  <NoS/>
  <Title>
    <TitleT>01</TitleT>
    <TTx>The Sound of a Wild Snail Eating</TTx>
    <Sbt>A Memoir</Sbt>
  </Title>
</Product>

My XSL

<xsl:variable name="delimiter" select="'&#9;'"/>

<xsl:for-each select="//Product/child::*|//Product/self::*">

  <xsl:if test="$fieldNames = 'yes'">

    <xsl:if test="position() = 1 or position()&gt;1">

      <xsl:for-each select="@*">
        <xsl:value-of select="name()"/>

        <xsl:value-of select="$delimiter"/>

      </xsl:for-each>

      <xsl:for-each select="*">
        <xsl:value-of select="name()"/>

        <xsl:if test="position() != last()">
          <xsl:value-of select="$delimiter"/>
        </xsl:if>
      </xsl:for-each>
      <xsl:text>
    </xsl:text>
    </xsl:if>
  </xsl:if>
  <xsl:for-each select="@*">
    <xsl:value-of select="."/>
    <xsl:value-of select="$delimiter"/>
  </xsl:for-each>
  <xsl:for-each select="*">
    <xsl:value-of select="."/>
    <xsl:if test="position() != last()">
      <xsl:value-of select="$delimiter"/>
    </xsl:if>
  </xsl:for-each>
  <xsl:text>

Required Output

Record          Not     ProductId   ProdIDT IDV             ProductId       ProdIDT 

IDV             ProdFormDe      EpTy    NoS Title           TitleT  TTx     Sbt
1616200243      03                      02      1616200243                      03      9781616200244   Electronic book text            000             01      The Sound of a Wild Snail Eating        A Memoir