J'ai un fichier XML volumineux (600 Mo) et je souhaite le convertir en CSV via des commandes de terminal. J'ai essayé de convertir le code XML en TXT via la commande xml2 en utilisant la syntaxe suivante.
xml2 <BIG.xml> BIG.txt
Mon XML Fromat est
<ReportDetails>
<Date>08/08/2012</Date>
<CaseNo>13030903</CaseNo>
<UserDetailsText>Individual Details</UserDetailsText>
<UserDetails>
<UserId>0903</UserId>
<FirstName>John</FirstName>
<Surname>Perry</Surname>
<Occupation>Developer</Occupation>
<DateofBirth>02/14/1981</DateofBirth>
</UserDetails>
<ApplicationDetailsText>Conflict Resolution Details</ApplicationDetailsText>
<ApplicationDetails>
<ApplicationNo>13033</ApplicationNo>
<ApplicationName>John Perry</ApplicationName>
<Department>Information Technology</Department>
<ApplicationType>Personal</ApplicationType>
<ApplicationDate>06/07/2012</ApplicationDate>
<ApplicationEndDate>09/07/2012</ApplicationEndDate>
<ApplicationStatus>Closed</ApplicationStatus>
</ApplicationDetails>
</ReportDetails>
Je veux que ces champs dans un fichier CSV soient séparés par un tuyau (|)
Date | N ° de cas | Prénom | Nom | ApplicationNo | NomApplication | Date d'application | État de la candidature
Aussi, si je veux faire le fichier via un fichier PHP, aurai-je besoin d'un script Shell pour le faire?.
Utilisez XSL pour effectuer la transformation au format exact dont vous avez besoin. par exemple.,
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:template match="/ReportDetails">
<xsl:value-of select="Date"/><xsl:text>|</xsl:text>
<xsl:value-of select="CaseNo"/><xsl:text>|</xsl:text>
<xsl:apply-templates select="UserDetails" />
</xsl:template>
<xsl:template match="/ReportDetails/UserDetails">
<xsl:value-of select="FirstName"/><xsl:text>|</xsl:text>
<xsl:value-of select="Surname"/><xsl:text>|</xsl:text>
</xsl:template>
<!-- etc -->
</xsl:stylesheet>
Et puis, compte tenu de ce qui précède (par exemple, dans foo.xsl pour transformer le document XML original foo.xml):
$ xsltproc foo.xsl foo.xml
08/08/2012|13030903|John|Perry|
(Le diable est dans les détails du xsl ... il y a de nombreuses façons de mettre cela en oeuvre ...)