将XML文件导入Access

时间:2017-09-19 07:46:30

标签: xml ms-access import

我需要将XML文件导入Access数据库。

我尝试Application.ImportXML,但文件结构错误。 导入后我有3个表,但主表格FormattedReportObject具有结构:

  

“ObjectName”“FormattedValue”“Value”

我需要创建一个结构表:

  

“Tytul”“z1Lpf1”“z1Iloscf1”“z1KodKreskowyf1”“z1SymbolTowaruf1”

此结构的值位于FormattedValue列中。

Link to my website

1 个答案:

答案 0 :(得分:1)

考虑使用XSLT,这是专门用于转换XML文件的专用语言。由于原始XML不会导入所需的结构,因此您需要转换原始XML以提取所需的数据。

具体来说,您必须将 ObjectName 文本作为新的XML元素传递,才能作为Access表中的列进行迁移。此外,XSLT仅过滤XML的详细信息部分,该部分维护完整的完整数据,而没有任何空列和行。

XSLT 脚本(另存为.xsl文件,一个要在VBA中加载的特殊完全有效的.xml文件)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:doc="urn:crystal-reports:schemas"
                              exclude-result-prefixes="doc">
  <xsl:output indent="yes" encoding="utf-8"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/doc:FormattedReport">
    <xsl:copy>
      <xsl:apply-templates select="descendant::doc:FormattedReportObjects[doc:FormattedReportObject/doc:ObjectName='z1Lpf1']"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="doc:FormattedReportObjects">
    <xsl:element name="data" namespace="urn:crystal-reports:schemas">      
        <xsl:apply-templates select="doc:FormattedReportObject"/>      
    </xsl:element>
  </xsl:template>

  <xsl:template match="doc:FormattedReportObject">  
    <xsl:element name="{doc:ObjectName}" namespace="urn:crystal-reports:schemas">
        <xsl:value-of select="normalize-space(doc:Value|doc:TextValue)"/>
    </xsl:element>      
  </xsl:template>

</xsl:stylesheet>

<强> VBA

Public Sub XMLImportData()
    ' ADD MSXML, v6.0 REFERENCE UNDER TOOLS
    Dim xmlDoc As New MSXML2.DOMDocument60 
    Dim xslDoc As New MSXML2.DOMDocument60
    Dim newDoc As New MSXML2.DOMDocument60

    ' LOAD XML AND XSL FILES
    xmlDoc.async = False
    xmlDoc.Load "http://kumcio.cba.pl/546kopia.xml"

    xslDoc.async = False
    xslDoc.Load "C:\Path\To\XSLT_Script.xsl"

    ' TRANSFORM XML
    xmlDoc.transformNodeToObject xslDoc, newDoc
    newDoc.Save "C:\Path\To\OutputXML.xml"

    Application.ImportXML "C:\Path\To\OutputXML.xml"

    Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing
End Sub

<强>输出

<?xml version="1.0" encoding="utf-8"?>
<FormattedReport xmlns="urn:crystal-reports:schemas" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
    <data>
        <z1Lpf1>1.00</z1Lpf1>
        <z1NazwaLubOpisf1>1.17003Świetlik 4,5 x 39 ziel</z1NazwaLubOpisf1>
        <z1Iloscf1>100.00</z1Iloscf1>
        <z1Jmf1>szt.</z1Jmf1>
        <z1KodKreskowyf1>5902767311281</z1KodKreskowyf1>
        <z1Wlasne1f1>382378</z1Wlasne1f1>
        <z1Wlasne2f1>50</z1Wlasne2f1>
        <z1SymbolTowaruf1>1.17003</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>2.00</z1Lpf1>
        <z1NazwaLubOpisf1>1.17004Świetlik 4,5 x 39 czer</z1NazwaLubOpisf1>
        <z1Iloscf1>100.00</z1Iloscf1>
        <z1Jmf1>szt.</z1Jmf1>
        <z1KodKreskowyf1>5902767311298</z1KodKreskowyf1>
        <z1Wlasne1f1>382381</z1Wlasne1f1>
        <z1Wlasne2f1>50</z1Wlasne2f1>
        <z1SymbolTowaruf1>1.17004</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>3.00</z1Lpf1>
        <z1NazwaLubOpisf1>1.17005Świetlik 4,5 x 39 nieb</z1NazwaLubOpisf1>
        <z1Iloscf1>100.00</z1Iloscf1>
        <z1Jmf1>szt.</z1Jmf1>
        <z1KodKreskowyf1>5902767311304</z1KodKreskowyf1>
        <z1Wlasne1f1>382386</z1Wlasne1f1>
        <z1Wlasne2f1>50</z1Wlasne2f1>
        <z1SymbolTowaruf1>1.17005</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>4.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.01015Gł.jig 7g hacz 3/0</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767315227</z1KodKreskowyf1>
        <z1Wlasne1f1>382189</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.01015</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>5.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.01013Gł.jig 7g hacz 1/0</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767315203</z1KodKreskowyf1>
        <z1Wlasne1f1>382177</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.01013</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>6.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.02017Głowka jigowa micro7g</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767311786</z1KodKreskowyf1>
        <z1Wlasne1f1>382686</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.02017</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>7.00</z1Lpf1>
        <z1NazwaLubOpisf1>1.12054kotwiczka 4 gunsmoke</z1NazwaLubOpisf1>
        <z1Iloscf1>10.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767310581</z1KodKreskowyf1>
        <z1Wlasne1f1>382863</z1Wlasne1f1>
        <z1Wlasne2f1>10</z1Wlasne2f1>
        <z1SymbolTowaruf1>1.12054</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>8.00</z1Lpf1>
        <z1NazwaLubOpisf1>1.12055kotwiczka 2 gunsmoke</z1NazwaLubOpisf1>
        <z1Iloscf1>10.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767310598</z1KodKreskowyf1>
        <z1Wlasne1f1>382867</z1Wlasne1f1>
        <z1Wlasne2f1>10</z1Wlasne2f1>
        <z1SymbolTowaruf1>1.12055</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>9.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.01014Gł.jig 7g hacz 2/0</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767315210</z1KodKreskowyf1>
        <z1Wlasne1f1>382182</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.01014</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>10.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.01016Gł.jig 7g hacz 4/0</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767315234</z1KodKreskowyf1>
        <z1Wlasne1f1>382202</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.01016</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>11.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.01017Gł.jig 7g hacz 5/0</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767315241</z1KodKreskowyf1>
        <z1Wlasne1f1>382210</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.01017</z1SymbolTowaruf1>
    </data>
    <data>
        <z1Lpf1>12.00</z1Lpf1>
        <z1NazwaLubOpisf1>3.04005Gł jig żół blaszka 6g</z1NazwaLubOpisf1>
        <z1Iloscf1>5.00</z1Iloscf1>
        <z1Jmf1>opak.</z1Jmf1>
        <z1KodKreskowyf1>5902767311847</z1KodKreskowyf1>
        <z1Wlasne1f1>382695</z1Wlasne1f1>
        <z1Wlasne2f1>5</z1Wlasne2f1>
        <z1SymbolTowaruf1>3.04005</z1SymbolTowaruf1>
    </data>
</FormattedReport>

Imported Access Table