What I'm trying to do: There is an automation system which produces like 10k XML files. I want to read all that files into a MS Access Database. In order to import the files (with the VBA ImportXML
function) I need to transform the files with the VBA FormatXML
function using an XSL stylesheet.
I googled some stuff, but it seems like I can't get it to work. This is what an XML file looks like (based on confidentiality reasons I cant show a real file, but the structure looks like that):
<?xml version="1.0" encoding="UTF-16"?>
<Album xmlns="x-schema:ConfigFileSchema.xml">
<Informations>
<General>
<Name>Name of Album</Name>
<Band>Name of Band</Band>
</General>
<Parameters>
<Parameter>
<ParamName>Length of Album</ParamName>
<ParamValue>57:16</ParamValue>
</Parameter>
<Parameter>
<ParamName>Year</ParamName>
<ParamValue>2020</ParamValue>
</Parameter>
</Parameters>
<Tracks>
<Track>
<Trackdef>
<TrackName>Name of Track</TrackName>
<TrackLength>3:30</TrackLength>
</Trackdef>
<Parameters>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Parameters>
</Track>
<Track>
<Trackdef>
<TrackName>Name of Track</TrackName>
<TrackLength>3:30</TrackLength>
</Trackdef>
<Parameters>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Parameters>
</Track>
</Tracks>
</Informations>
</Album>
I tried to do some very easy transformations to get the output XML from TransformXML to look like that:
<?xml version="1.0"?>
<Information>
<Track>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Track>
<Track>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Track>
</Information>
Using this XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Album/Informations/Tracks/Track/Parameters">
<Information>
<xsl:for-each select="child::Parameter">
<Parameter>
<xsl:copy-of select="child::ParamName"/>
<xsl:copy-of select="child::ParamValue"/>
</Parameter>
</xsl:for-each>
</Information>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Sadly it doesn't do anything, a blank file is produced. I hope that somebody can point out what I'm doing wrong here.