我有一个XML文件,我想在MS访问中导入。问题是它有多个嵌套节点,这意味着访问为每个不同类型的节点创建一个新表。现在的问题是我们不能在不同的表之间创建任何关系,我们甚至无法破译他们在数据库中的关系。无论如何都有解决这个问题的方法吗? xml由我使用的软件生成。一个示例XML数据,它将导致我面临的问题类型:
<Envelope>
<Sale>
<CustomerName>a</CustomerName>
<InvoiceNo>1</InvoiceNo>
<item>
<ItemName>I1</ItemName>
<QTY>10</QTY>
<Amount>25</Amount>
</item>
<item>
<ItemName>I2</ItemName>
<QTY>15</QTY>
<Amount>14</Amount>
</item>
</Sale>
<Sale>
<CustomerName>b</CustomerName>
<InvoiceNo>2</InvoiceNo>
<item>
<ItemName>I3</ItemName>
<QTY>10</QTY>
<Amount>72</Amount>
</item>
<item>
<ItemName>I4</ItemName>
<QTY>21</QTY>
<Amount>43</Amount>
</item>
</Sale>
<Sale>
<CustomerName>c</CustomerName>
<InvoiceNo>3</InvoiceNo>
<item>
<ItemName>I5</ItemName>
<QTY>13</QTY>
<Amount>53</Amount>
</item>
<item>
<ItemName>I6</ItemName>
<QTY>37</QTY>
<Amount>27</Amount>
</item>
</Sale>
<Sale>
<CustomerName>d</CustomerName>
<InvoiceNo>4</InvoiceNo>
<item>
<ItemName>I7</ItemName>
<QTY>45</QTY>
<Amount>67</Amount>
</item>
<item>
<ItemName>I8</ItemName>
<QTY>12</QTY>
<Amount>98</Amount>
</item>
</Sale>
</Envelope>
答案 0 :(得分:1)
如果[InvoiceNo]可以作为[Sale]表的主键,那么您需要做的就是执行 XML转换,以便在导入时将[InvoiceNo]添加到[item]表。如果将以下内容保存为“LinkItemsToSales.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="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item">
<item>
<InvoiceNo><xsl:value-of select="../InvoiceNo"/></InvoiceNo>
<xsl:apply-templates select="@*|node()"/>
</item>
</xsl:template>
</xsl:stylesheet>
然后您可以使用“导入XML”对话框中的“转换...”按钮将该文件指定为要应用的转换。导入完成后,[InvoiceNo]将出现在[item]表中,如下所示:
InvoiceNo ItemName QTY Amount
--------- -------- --- ------
1 I1 10 25
1 I2 15 14
2 I3 10 72
2 I4 21 43
3 I5 13 53
3 I6 37 27
4 I7 45 67
4 I8 12 98