繁体   English   中英

将 XML 导入 MS Access:非标准 xml?

[英]Importing XML to MS Access: Non standard xml?

我正在尝试将来自https://www.dsireusa.org/resources/database-archives/的 XML 文件导入 MS Access。

我以前做过简单的导入 CSV 导入。 尝试导入 XML 时,导入完全失败。

仔细观察,我发现 XML 的格式与我能够成功上传的 XML 格式不同。 据我了解,标准 XML 如下所示:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我拥有的 XML 文件看起来像这样:

<?xml version="1.0" ?>

<tables>
<table name="program">
    <row index="0">
        <column name="id"><![CDATA[1]]></column>
        <column name="state_id"><![CDATA[39]]></column>
        <column name="is_entire_state"><![CDATA[1]]></column>
        <column name="implementing_sector_id"><![CDATA[1]]></column>
        <column name="program_category_id"><![CDATA[2]]></column>
        <column name="program_type_id"><![CDATA[44]]></column>
        <column name="created_by_user_id"><![CDATA[534]]></column>
        <column name="code"><![CDATA[ND02R]]></column>
        <column name="name"><![CDATA[Solar Easements]]></column>
        <column name="updated_ts"><![CDATA[2017-08-10 15:14:19]]></column>
        <column name="created_ts"><![CDATA[2000-01-01 00:00:00]]></column>
        <column name="published"><![CDATA[1]]></column>
        <column name="websiteurl"><![CDATA[]]></column>
        <column name="administrator"><![CDATA[]]></column>
        <column name="fundingsource"><![CDATA[]]></column>
        <column name="budget"><![CDATA[]]></column>
        <column name="start_date"><![CDATA[]]></column>
        <column name="start_date_text"><![CDATA[]]></column>
        <column name="end_date"><![CDATA[]]></column>
        <column name="end_date_text"><![CDATA[]]></column>
        <column name="summary"><![CDATA[<p>&#10;&#9;North Dakota's solar easement law is similar to those established by many other states. The law allows a property owner to obtain a solar easement from another property owner for the purpose of ensuring adequate exposure of a solar energy system to sunlight. A solar easement must include:</p>&#10;<ul>&#10;&#9;<li>&#10;&#9;&#9;The vertical and horizontal angles, expressed in degrees, at which the solar easement extends over the real property subject to the solar easement;</li>&#10;&#9;<li>&#10;&#9;&#9;Any terms, conditions, or both under which the solar easement is granted or will be terminated; and</li>&#10;&#9;<li>&#10;&#9;&#9;Any provisions for compensation of the owner of the property benefiting from the solar easement in the event of interference with the enjoyment of the solar easement or compensation of the owner of the property subject to the solar easement for maintaining the solar easement.</li>&#10;</ul>&#10;<p>&#10;&#9;Solar easements must be created in writing and are subject to the same conveyancing and instrument recording requirements as other easements.</p>]]></column>
        <column name="additional_technologies"><![CDATA[]]></column>
        <column name="fromSir"><![CDATA[0]]></column>
    </row>

在我看来,Access 显然无法识别此 XML 的格式。 有没有什么简单的方法可以让我说服 access 吃我试图喂它的西兰花而不是一个小子?

如有必要,我可以提供来自访问的错误报告,但考虑到整个导入失败,在我看来访问根本无法识别格式?

考虑使用XSLT ,一种设计用于转换 XML 文档的专用语言。 具体来说,将@name属性迁移到节点名称,以便正确导入到 MS Access 表中。 然后使用 VBA 之类的语言访问 Access 方法: TransformXMLImportXML

XSLT (另存为.xsl文件,特殊的.xml文件)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
    </xsl:template>

    <xsl:template match="table">
     <xsl:element name="{@name}">
       <xsl:apply-templates select="node()"/>
     </xsl:element>
    </xsl:template>

    <xsl:template match="column">
     <xsl:element name="{@name}">
       <xsl:apply-templates select="node()"/>
     </xsl:element>
    </xsl:template>

</xsl:stylesheet>

在线演示

VBA

Public Sub import_dsireusa_xml()

    ' TRANSFORM RAW XML
    Application.TransformXML "C:\Path\To\Raw\Output.xml", _
                             "C:\Path\To\XSLT\Transform.xsl", _
                             "C:\Path\To\Final\Output.xml"

    ' RAW XML EXPORT
    Application.ImportXML "C:\Path\To\Final\Output.xml", acStructureAndData

End Sub

根据您提供的 URL,同一个网站有 *.zip 文件和 *.csv 文件。 *.csv 文件与 XML 文件具有相同的内容。 因此,您可以轻松下载 *.zip 文件、解压缩它们并将 *.csv 文件加载到 MS Access 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM