csv - XSLT transformation of a XML file -


i have xml this, can have model region , tt , model tt:

<brand id="1" desc="ih">     <type id="1" desc="tractors">         <product id="1" desc="tractors">             <series id="10496" desc="mxc">                 <model id="10497" desc="mx100c" tscode="048">                     <region id="4" name="apac" desc="asia pacific" />                     <region id="1" name="na" desc="north america" />                     <tt code="696033805" desc="-mx maxxum mfd  " colcode="2" />                     <tt code="696033808" desc="-mx maxxum 100c " colcode="2" />                     <tt code="696044567" desc="-mx maxxum 300c " colcode="2" />                 </model>                 <model id="11597" desc="abc123" tscode="765">                     <tt code="123033805" desc="-ax xerces abcd  " colcode="1" />                     <tt code="234033808" desc="-ax xerces edf   " colcode="3" />                 </model>             </series>         </product>     </type> </brand> 

i need obtain csv this:

brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =4;ttcode=696033805 brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =4;ttcode=696033808 brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =4;ttcode=696044567 brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =1;ttcode=696033805 brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =1;ttcode=696033808 brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =1;ttcode=696044567 brandid=1;typeid=1;productid=1;seriesid=1;modelid=10497;regionid =1;ttcode=696033808 brandid=1;typeid=1;productid=1;seriesid=1;modelid=11597;regionid = ;ttcode=123033805 brandid=1;typeid=1;productid=1;seriesid=1;modelid=11597;regionid = ;ttcode=234033808 

i have try xslt not correct result:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" encoding="iso-8859-1" omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space  elements="*"/> <xsl:variable name="newline" select="'&#x0a;'" /> <xsl:variable name="tab" select="'&#x09;'" />    <xsl:template match="/">       <!-- <xsl:apply-templates select="productlist/brand" /> -->       <xsl:apply-templates  />    <xsl:template match="tt">       <xsl:value-of select="concat(../../../../../@id,$tab,../../../../../@desc,$tab)"  /> <!-- brand -->       <xsl:value-of select="concat(../../../../@id,$tab,../../../../@desc,$tab)"  /> <!-- type -->       <xsl:value-of select="concat(../../../@id,$tab,../../../@desc,$tab)"  /> <!-- product -->       <xsl:value-of select="concat(../../@id,$tab,../../@desc,$tab)"  /> <!-- series -->       <xsl:value-of select="concat(../@id,$tab,../@desc,$tab)"     /> <!-- model -->       <xsl:value-of select="concat($tab, $tab, $tab, $tab, $tab,    $tab)" />  <!-- region -->       <xsl:value-of select="concat(@code, $tab, @desc, $tab, @colcode)" />       <xsl:value-of select="$newline"/>    </xsl:template> </xsl:stylesheet> 

it show tt not region.

how can correct xslt?

if understand correctly you're trying (which not @ certain), should try:

xslt 1.0

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" encoding="iso-8859-1" omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space  elements="*"/>  <xsl:variable name="newline" select="'&#x0a;'" /> <xsl:variable name="tab" select="'&#x09;'" />  <xsl:template match="/">     <xsl:for-each select="brand/type/product/series/model/region">         <xsl:variable name="common" select="concat(ancestor::brand/@id, $tab, ancestor::type/@id, $tab, ancestor::product/@id, $tab, ancestor::series/@id, $tab, ancestor::model/@id, $tab, @id)"/>         <xsl:for-each select="../tt">             <xsl:value-of select="concat($common, $tab, @code, $newline)" />         </xsl:for-each>     </xsl:for-each> </xsl:template>  </xsl:stylesheet> 

applied input example (after closing brand tag properly!), result be:

1   1   1   10496   10497   4   696033805 1   1   1   10496   10497   4   696033808 1   1   1   10496   10497   4   696044567 1   1   1   10496   10497   1   696033805 1   1   1   10496   10497   1   696033808 1   1   1   10496   10497   1   696044567 

edit

i have find have case, can have model region , tt , model tt

that's quite difference, , requires significant change in approach:

xslt 1.0

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" encoding="iso-8859-1" omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space  elements="*"/>  <xsl:variable name="newline" select="'&#x0a;'" /> <xsl:variable name="tab" select="'&#x09;'" />  <xsl:template match="/">     <xsl:for-each select="brand/type/product/series/model">         <xsl:variable name="common" select="concat(ancestor::brand/@id, $tab, ancestor::type/@id, $tab, ancestor::product/@id, $tab, ancestor::series/@id, $tab, ancestor::model/@id, $tab, @id)"/>         <xsl:choose>             <xsl:when test="region">                 <xsl:apply-templates select="region">                     <xsl:with-param name="common" select="$common"/>                 </xsl:apply-templates>             </xsl:when>             <xsl:otherwise>                 <xsl:apply-templates select="tt">                     <xsl:with-param name="common" select="concat($common, $tab)" />                 </xsl:apply-templates>             </xsl:otherwise>         </xsl:choose>      </xsl:for-each> </xsl:template>  <xsl:template match="region">      <xsl:param name="common"/>     <xsl:apply-templates select="../tt">         <xsl:with-param name="common" select="concat($common, $tab, @id)" />     </xsl:apply-templates> </xsl:template>   <xsl:template match="tt">      <xsl:param name="common"/>     <xsl:value-of select="concat($common, $tab, @code, $newline)" /> </xsl:template>  </xsl:stylesheet> 

result

1   1   1   10496       10497   4   696033805 1   1   1   10496       10497   4   696033808 1   1   1   10496       10497   4   696044567 1   1   1   10496       10497   1   696033805 1   1   1   10496       10497   1   696033808 1   1   1   10496       10497   1   696044567 1   1   1   10496       11597       123033805 1   1   1   10496       11597       234033808 

Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

Nuget pack csproj using nuspec -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -