XML CSV à l'aide de XSLT

Je suis à la recherche d'un être intelligent, efficace XSLT qui ne convertir un document XML au format CSV des données. Il doit prendre soin de tous les éléments possibles dans les nœuds enfants.
Par exemple, le XML ressemble à ceci

<?xml version="1.0" encoding="ISO-8859-1"?>
<sObjects>
   <sObject>
     <Name>Raagu</Name>
     <BillingStreet>Hoskote</BillingStreet>
   </sObject>
   <sObject>
      <Name>Rajath</Name>
      <BillingStreet>BTM</BillingStreet>
      <age>25</age>
   </sObject>
   <sObject>
      <Name>Sarath</Name>
      <BillingStreet>Murgesh</BillingStreet>
      <location>Bangalore</location>
   </sObject>
</sObjects>

Et ma sortie CSV devrait ressembler à ceci

Name,BillingStreet,age,location
Raagu,Hoskote,,
Rajath,BTM,25,
Sarath,Murgesh,,Bangalore

Toutes les lignes doivent avoir des champs pour toutes les touches dans le CSV, même si le XML n'ont de valeur pour lui.

Qui suit est le code XSLT m'est venu en regardant les différents exemples ici.

C'est le XSLT je viens avec le

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:variable name="delimiter" select="','"/>

    <xsl:key name="field" match="sObject/*" use="name()"/>

    <xsl:template match="/">

        <xsl:for-each select="/*/*/*[generate-id()=generate-id(key('field', name())[1])]">
            <xsl:value-of select="name()"/>

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

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

        <xsl:for-each select="/*/sObject">

            <xsl:variable name="property" select="." />
            <xsl:for-each select="$property/*">

                <xsl:variable name="value" select="." />
                <xsl:value-of select="$value"/>
                <xsl:if test="position() != last()">
                    <xsl:value-of select="$delimiter"/>
                </xsl:if>
                <xsl:if test="position() = last()">
                    <xsl:text>&#xa;</xsl:text>
                </xsl:if>

             </xsl:for-each>

        </xsl:for-each>


     </xsl:template>
 </xsl:stylesheet>

et imprimer ce mettre

Name,BillingStreet,age,location
Raagu,Hoskote
Rajath,BTM,25
Sarath,Murgesh,Bangalore

Mais je voulais toutes les lignes doivent contenir des valeurs pour ces nombreuses fois pour toutes les clés sur la première ligne.

Pourriez-vous svp m'aider à réaliser cela en utilisant le code XSLT ?

  • Nous allons l'aider. Lorsque vous êtes coincé. Essayez quelque chose, et à vous demander si quelque chose n'est pas clair. FAQ
  • Double Possible de plusieurs questions similaires. Voir les liens sous "Liées".
  • Grâce ppeterka. Depuis, je suis nouveau sur XSLT, j'ai essayé différentes choses sur XSLT pour obtenir ce fait. J'ai écrit échantillon de code XSL pour obtenir la première ligne (toutes les touches)mais de ne pas avoir de logique pour obtenir les valeurs avec les positions appropriées. J'ai vu au sujet des liens et n'a pas trouvé de solution à mon problème. Je suis coincé à ce point maintenant et ont besoin d'aide genre de Stackoverflow maintenant.
  • Montre nous ce que vous avez essayé, de sorte que nous pouvons comprendre ce que vous rencontrez des problèmes avec
  • Aussi, pouvez-vous utiliser XSLT2.0?
  • Ma condition, c'est de faire ce travail en XSLT 1.0.