J'essaie de prendre un fichier CSV en entrée et de le transformer en XML. Je suis nouveau à XSLT et je l'ai trouvé un moyen de convertir un fichier CSV en XML (en utilisant un exemple de Andrew Welch) comme ceci:Transformation en deux phases utilisant XSLT 2.0
fichier CSV d'entrée:
car manufacturer,model,color,price,inventory
subaru,outback,blue,23195,54
subaru,forester,silver,20495,23
Et mon XML de sortie serait :
<?xml version="1.0" encoding="UTF-8"?>
<rows>
<row>
<column name="car manufacturer">subaru</column>
<column name="model">outback</column>
<column name="color">blue</column>
<column name="price">23195</column>
<column name="inventory">54</column>
</row>
<row>
<column name="car manufacturer">subaru</column>
<column name="model">forester</column>
<column name="color">silver</column>
<column name="price">20495</column>
<column name="inventory">23</column>
</row>
</rows>
Ma sortie désirée est en fait quelque chose de similaire à:
<stock>
<model>
<car>subaru outback</car>
<color>blue</color>
<price>23195</price>
<inventory>54</inventory>
</model>
<model>
<car>subaru forester</car>
<color>silver</color>
<price>20495</price>
<inventory>23</inventory>
</model>
</stock>
Ce que je lis est qu'il serait préférable de faire une transformation en deux phases. Le CSV en XML est fait en utilisant XSLT 2.0, donc je pensais que la transformation en deux phases serait faite en utilisant cela aussi sans utiliser la fonction d'ensemble de nœuds. Par conséquent, la première phase consistera à prendre le fichier CSV d'origine en entrée, puis à sortir le fichier XML intermédiaire illustré ci-dessus. Prenez ensuite ce fichier XML intermédiaire et transmettez-le à une autre transformation pour obtenir la sortie souhaitée.
Quelqu'un peut-il aider à la réalisation de la transformation en deux phases? J'ai du mal à passer la sortie de la première phase en entrée de la phase 2?
J'ai quelque chose comme ça jusqu'à présent:
<xsl:import href="csv2xml.xsl"/>
<xsl:output method="xml" indent="yes" />
<xsl:variable name="intermediate">
<xsl:apply-templates select="/" mode="csv2xml"/>
</xsl:variable>
<xsl:template match="rows" name="main">
**[This is what I'm having trouble with]**
</xsl:template>
Cela semble être une utilisation inefficace de XSLT. Vous pouvez analyser le fichier CSV directement et générer le fichier XML directement dans un langage procédural standard (par exemple, Perl, Python, etc.). XSLT n'est pas le meilleur outil pour analyser des données non-XML. – ewh