【问题标题】:Nested XML export of parent/child data from Access从 Access 中嵌套 XML 导出父/子数据
【发布时间】:2017-02-18 19:11:07
【问题描述】:
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>

我如何合并表格并使它们像上面提到的那样,以便每个船只名称只有一次,并且该船只的所有项目都在下面列出并添加标签?

【问题讨论】:

    标签: xml vba ms-access ms-access-2007


    【解决方案1】:

    在导出到 XML 时,Access 使用“关系”来标识父/子层次结构。您的数据库显然缺少 [vessels] 和 [Export] 之间的关系,因此您得到了问题中显示的两个表的“平面”XML 导出。

    如果将关系添加到数据库...

    ...然后您将获得您所寻求的“嵌套”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>
    

    【讨论】:

      【解决方案2】:

      这是一个快速的草图(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 );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多