从 Access 嵌套 XML 导出 parent/child 数据
Nested XML export of parent/child data from Access
Public Sub Click()
Dim objOtherTbls As AdditionalData
Set objOtherTbls = Application.CreateAdditionalData
objOtherTbls.Add "vessels"
objOtherTbls.Add "Export"
Application.ExportXML ObjectType:=acExportTable, _
DataSource:="orderSummary", _
DataTarget:="pls.xml", _
AdditionalData:=objOtherTbls
End Sub
如何使 XML 嵌套且重复字段仅重复一次?
I would like something like:
<vessels>
<vessels ID>
<product Id>
<quantity>
<product Id>
<quantity>
<product Id>
<quantity>
我如何合并表格并使它们像上面提到的那样,以便每个船只名称只有一次,并且该船只的所有项目都列在下面并标记在其中?
这是一个简单的草图(SQL DDL 需要 ANSI-92 查询模式,但可以使用 Access GUI 工具重现):
CREATE TABLE vessels
( vessel_id INT NOT NULL UNIQUE,
vessel_name CHAR(1) WITH COMPRESSION NOT NULL UNIQUE );
CREATE TABLE Export
( product_id INT NOT NULL UNIQUE,
Quantity INT NOT NULL, CHECK ( Quantity >= 0 ),
vessel_id INT NOT NULL
REFERENCES vessels ( vessel_id ) );
INSERT INTO vessels VALUES ( 1, 'A' );
INSERT INTO vessels VALUES ( 2, 'B' );
INSERT INTO vessels VALUES ( 3, 'C' );
INSERT INTO vessels VALUES ( 4, 'D' );
INSERT INTO vessels VALUES ( 5, 'E' );
INSERT INTO Export VALUES ( 10, 10, 3 );
INSERT INTO Export VALUES ( 100, 20, 3 );
INSERT INTO Export VALUES ( 1000, 1, 3 );
INSERT INTO Export VALUES ( 10000, 10, 3 );
INSERT INTO Export VALUES ( 10001, 20, 3 );
INSERT INTO Export VALUES ( 10002, 10, 3 );
Access 在导出到 XML 时使用 "Relationships" 来识别 parent/child 层次结构。您的数据库显然缺少 [vessels] 和 [Export] 之间的关系,因此您得到了问题中显示的两个表的 "flat" XML 导出。
如果将关系添加到数据库...
... 然后您将得到您要查找的 "nested" XML 导出:
<vessels>
<vessel_id>2</vessel_id>
<vessel_name>B</vessel_name>
</vessels>
<vessels>
<vessel_id>3</vessel_id>
<vessel_name>C</vessel_name>
<Export>
<product_id>10</product_id>
<Quantity>10</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>100</product_id>
<Quantity>20</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>1000</product_id>
<Quantity>1</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>10000</product_id>
<Quantity>10</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>10001</product_id>
<Quantity>20</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>10002</product_id>
<Quantity>10</Quantity>
<vessel_id>3</vessel_id>
</Export>
</vessels>
Public Sub Click()
Dim objOtherTbls As AdditionalData
Set objOtherTbls = Application.CreateAdditionalData
objOtherTbls.Add "vessels"
objOtherTbls.Add "Export"
Application.ExportXML ObjectType:=acExportTable, _
DataSource:="orderSummary", _
DataTarget:="pls.xml", _
AdditionalData:=objOtherTbls
End Sub
如何使 XML 嵌套且重复字段仅重复一次?
I would like something like:
<vessels>
<vessels ID>
<product Id>
<quantity>
<product Id>
<quantity>
<product Id>
<quantity>
我如何合并表格并使它们像上面提到的那样,以便每个船只名称只有一次,并且该船只的所有项目都列在下面并标记在其中?
这是一个简单的草图(SQL DDL 需要 ANSI-92 查询模式,但可以使用 Access GUI 工具重现):
CREATE TABLE vessels
( vessel_id INT NOT NULL UNIQUE,
vessel_name CHAR(1) WITH COMPRESSION NOT NULL UNIQUE );
CREATE TABLE Export
( product_id INT NOT NULL UNIQUE,
Quantity INT NOT NULL, CHECK ( Quantity >= 0 ),
vessel_id INT NOT NULL
REFERENCES vessels ( vessel_id ) );
INSERT INTO vessels VALUES ( 1, 'A' );
INSERT INTO vessels VALUES ( 2, 'B' );
INSERT INTO vessels VALUES ( 3, 'C' );
INSERT INTO vessels VALUES ( 4, 'D' );
INSERT INTO vessels VALUES ( 5, 'E' );
INSERT INTO Export VALUES ( 10, 10, 3 );
INSERT INTO Export VALUES ( 100, 20, 3 );
INSERT INTO Export VALUES ( 1000, 1, 3 );
INSERT INTO Export VALUES ( 10000, 10, 3 );
INSERT INTO Export VALUES ( 10001, 20, 3 );
INSERT INTO Export VALUES ( 10002, 10, 3 );
Access 在导出到 XML 时使用 "Relationships" 来识别 parent/child 层次结构。您的数据库显然缺少 [vessels] 和 [Export] 之间的关系,因此您得到了问题中显示的两个表的 "flat" XML 导出。
如果将关系添加到数据库...
... 然后您将得到您要查找的 "nested" XML 导出:
<vessels>
<vessel_id>2</vessel_id>
<vessel_name>B</vessel_name>
</vessels>
<vessels>
<vessel_id>3</vessel_id>
<vessel_name>C</vessel_name>
<Export>
<product_id>10</product_id>
<Quantity>10</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>100</product_id>
<Quantity>20</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>1000</product_id>
<Quantity>1</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>10000</product_id>
<Quantity>10</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>10001</product_id>
<Quantity>20</Quantity>
<vessel_id>3</vessel_id>
</Export>
<Export>
<product_id>10002</product_id>
<Quantity>10</Quantity>
<vessel_id>3</vessel_id>
</Export>
</vessels>