【问题标题】:Import XML file to Access将 XML 文件导入 Access
【发布时间】:2017-09-21 22:33:39
【问题描述】:

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

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

“对象名”“格式化值”“值”

我需要创建一个具有结构的表:

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

此结构的值在 FormattedValue 列中。

Link to my website

【问题讨论】:

    标签: xml ms-access import


    【解决方案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>
    

    【讨论】:

    • 我试试这个,但我有错误。运行时错误“31593”:MS Access 在处理 OutputXML.xml 文件中的 XML 架构时遇到错误文档必须只包含一个根元素
    • 您实际上在根目录中有一个未声明的命名空间前缀:urn:crystal-reports:schemas。所以你的 Output.xml 是空白的。我已经调整了 XSLT 来解决这个问题。顺便说一句,您可以直接从 URL 加载 XML。使用您发布的链接查看更新的 VBA。
    • 成功了!!我试过 XSLT,但我有这个错误,我现在不知道为什么:)。非常感谢您的帮助!!!
    • 太棒了!乐意效劳。请注意在 StackOverflow 上说 thanks 的特殊方式。
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多