Der er jo ikke nogen, der har sagt at det skulle være nemt....., det er nu heller ikke så svært, som det ser ud til. Nedenstående er afprøvet og det virker. Dermed ikke sagt, at det ikke kunne gøres på en nemmere måde.
Jeg har lavet en prototype på import af dine xml-filer.
Bemærk at jeg anvender mappen C:\experten til alle filer. Bruger du andre mapper, skal du huske at rette i stierne i filerne. Jeg kalder din oprindelige xml-fil for staff.xml.
Gem følgende i filen tabel1.xsd og gem den i mappen c:\experten:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="
http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Tabel1" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="generated" type="xsd:dateTime"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Tabel1">
</xsd:sequence>
</xsd:element>
og gem følgende i tabellen staff.xsl og gem den i mappen c:\experten:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl= "
http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" indent="yes"/>
<xsl:template match="/*[local-name()='/']">
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\experten\tabel1.xsd" generated="2006-12-15T13:14:58">
<xsl:apply-templates select="/"/>
</dataroot>
</xsl:template>
<xsl:template match="/">
<tabel1>
<!-- henter institutionskode -->
<InstitutionCode>
<xsl:value-of select="EmploymentInformation/InstitutionCode"/>
</InstitutionCode>
<!-- henter cprnr -->
<CivilRegistrationNumber>
<xsl:value-of select="EmploymentInformation/Person/CivilRegistrationNumber"/>
</CivilRegistrationNumber>
<!-- henter arbejdstid fra dato -->
<WT_EffectiveFromDate>
<xsl:value-of select="EmploymentInformation/Person/Employment/WorkingTime/EffectiveFromDate"/>
</WT_EffectiveFromDate>
<!-- henter beskaeftigelsesdecimal -->
<WT_EmploymentWorkingRate>
<xsl:value-of select="EmploymentInformation/Person/Employment/WorkingTime/EmploymentWorkingRate"/>
</WT_EmploymentWorkingRate>
</tabel1>
</xsl:template>
</xsl:stylesheet>
I Access kan du mauelt importere xml-filen via menuen Filer - Hent eksterne data - Importer. Når du får vinduet 'Importer XML' vælger du 'Indstillinger' og markerer 'Tilføj data til eksisterende tabel'. I samme vindue vælger du 'Transformering' og tryk på knappen 'Tilføj'. Find 'staff.xsl' og tryk på 'Tilføj'. Tryk derefter på 'OK', hvorefter data importeres til tabellen 'tabel1'. Ved manuel import, skal du hver gang vælge 'Indstillinger' og 'Transformering'.
I stedet for den manuelle import kan du bruge lave en funktion i VBA - noget i retning af:
Function xmlimport()
' Function xmlimport(indfilnavn)
Dim filnavn, xmlfil, xlsfil As String
filnavn = indfilnavn
Set fs = Application.FileSearch
With fs
.LookIn = "C:\experten"
.SearchSubFolders = True
.FileName = filnavn
If .Execute() > 0 Then
xmlfil = "C:\experten\staff.xml" 'staff.xml er den oprindelige xml-fil
xlsfil = "C:\experten\staff.xsl"
outputXML = "C:\experten\oXML.xml"
'danner en ny xml-fil med ønsket indhold "C:\experten\oXML.xml"
Application.TransformXML xmlfil, xlsfil, outputXML
'importerer den nye xml-fil "C:\experten\oXML.xml" og tilføjer data i tabellen
Application.ImportXML outputXML, acAppendData
End If
End With
End Function
Funktionen virker. Den kan aktiveres med F5, når du står i Visual Basic. Du opdager formodentligt ikke at den kører, men prøv at åbne tabellen 'tabel1'.