gpt4 book ai didi

xml - 如何将带有嵌套节点(父/子关系)的 XML 导入 Access?

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:15 32 4
gpt4 key购买 nike

我正在尝试将 XML 文件导入 Access,但它创建了 3 个不相关的表。即子记录被导入到子表中,但无法知道哪些子记录属于哪个父表。

如何导入数据来维护父子节点(记录)之间的关系?

这是 XML 数据的示例:

<NOTARIO>
<C_NOT>8404180</C_NOT>
<APE>Abalos Nuevo</APE>
<NOM>Francisco José</NOM>
<NOTARIAS>
<NOTARIA>
<PRO>23</PRO>
<MUN>0888</MUN>
<F_IN>1984-12-01</F_IN>
<F_FI>1986-09-19</F_FI>
</NOTARIA>
<NOTARIA>
<PRO>14</PRO>
<MUN>0569</MUN>
<F_IN>1990-09-17</F_IN>
<F_FI>1995-03-15</F_FI>
</NOTARIA>
<NOTARIA>
<PRO>21</PRO>
<MUN>0412</MUN>
<F_IN>1995-03-30</F_IN>
<F_FI></F_FI>
</NOTARIA>
</NOTARIAS>
</NOTARIO>

最佳答案

您需要做的是您的 XML 数据转换为更适合 Access 的格式。具体来说,您需要将父键值(假设在本例中为C_NOT)插入到每个子节点中。

以下 XSLT 文件将为您完成此操作

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

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

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

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

<xsl:template match="NOTARIA">
<NOTARIA>
<C_NOT><xsl:value-of select="../../C_NOT"/></C_NOT>
<xsl:apply-templates select="@*|node()"/>
</NOTARIA>
</xsl:template>

</xsl:stylesheet>

这将转换您的 XML ...

<NOTARIO>
<C_NOT>8404180</C_NOT>
<APE>Abalos Nuevo</APE>
<NOM>Francisco José</NOM>
<NOTARIAS>
<NOTARIA>
<PRO>23</PRO>
<MUN>0888</MUN>
<F_IN>1984-12-01</F_IN>
<F_FI>1986-09-19</F_FI>
</NOTARIA>
<NOTARIA>
<PRO>14</PRO>
<MUN>0569</MUN>
<F_IN>1990-09-17</F_IN>
<F_FI>1995-03-15</F_FI>
</NOTARIA>
<NOTARIA>
<PRO>21</PRO>
<MUN>0412</MUN>
<F_IN>1995-03-30</F_IN>
<F_FI></F_FI>
</NOTARIA>
</NOTARIAS>
</NOTARIO>

...进入这个:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot>
<NOTARIO>
<C_NOT>8404180</C_NOT>
<APE>Abalos Nuevo</APE>
<NOM>Francisco José</NOM>
<NOTARIA>
<C_NOT>8404180</C_NOT>
<PRO>23</PRO>
<MUN>0888</MUN>
<F_IN>1984-12-01</F_IN>
<F_FI>1986-09-19</F_FI>
</NOTARIA>
<NOTARIA>
<C_NOT>8404180</C_NOT>
<PRO>14</PRO>
<MUN>0569</MUN>
<F_IN>1990-09-17</F_IN>
<F_FI>1995-03-15</F_FI>
</NOTARIA>
<NOTARIA>
<C_NOT>8404180</C_NOT>
<PRO>21</PRO>
<MUN>0412</MUN>
<F_IN>1995-03-30</F_IN>
<F_FI />
</NOTARIA>
</NOTARIO>
</dataroot>

...在 Access 导入它时在后台。

将该 XSLT 文件保存到您的硬盘(我将我的文件命名为“transformio.xslt”),然后启动 Access XML 导入过程。选择要导入的 XML 文件后,单击“转换”按钮 ...

ImportXmlDialog.png

...将您新创建的 XSLT 文件添加到列表中并选择它...

ImportTransforms.png

当您单击“确定”并返回到“导入 XML”对话框时,您可以伸展树(Splay Tree) View 以查看您现在在两个表中都有 C_NOT 值。

ImportXml2.png

导入完成后,您仍然会有两个表,但现在您可以在 C_NOT 上加入它们以获得数据的“平面” View :

QueryDesign.png

这给了我们

QuerySheet.png

关于xml - 如何将带有嵌套节点(父/子关系)的 XML 导入 Access?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30029303/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com