【问题标题】:Nesting multiple tables/queries on export to XML在导出到 XML 时嵌套多个表/查询
【发布时间】:2016-05-06 15:45:30
【问题描述】:

有什么方法可以使用Application.ExportXML 方法不仅可以合并多个查询,而且可以将查询相互嵌套?

例如,假设我有三个表。我已经能够使用Application.ExportXML 方法将三者合并在一起。我不想重复的主要查询不会重复,而包含所有客户信息的主要查询会重复。很好。

但结果是这样的(出于各种偏执的原因,我使用了假数据):

<DogCare>
  <Facility>Twin Peaks</Facility>
  <Year>1992</Year>
  <Month>1</Month>
</DogCare>
<DogTeam>
  <Team>DogWalker</Team>
  <DogsWalked>24</DogsWalked>
  <TreatsGiven>900</TreatsGiven>
</DogTeam>
<PetWalkTime>
  <Name>Palmer</Name>
  <Age>7</Age>
  <FavoriteSnack>Cheese</FavoriteSnack>
  <FavThingtoDo>Chew Shoes</FavThingtoDo>
  <Day>1</Day>
  <DidBusiness>Yes</DidBusiness>
  <Barked>Constantly</Barked>
  <PulledonLeash>Whole Time</PulledonLeash>
  <DeservesTreat>Gave it Anyway</DeservesTreat>
</PetWalkTime>
<PetWalkTime>
  <Name>Laura</Name>
  <Age>5</Age>
  <FavoriteSnack>Pie</FavoriteSnack>
  <FavThingtoDo>Fetch</FavThingtoDo>
  <Day>1</Day>
  <DidBusiness>Yes</DidBusiness>
  <Barked>No</Barked>
  <PulledonLeash>No</PulledonLeash>
  <DeservesTreat>Gave Several</DeservesTreat>
</PetWalkTime>

现在。 “DogCare”、“DogTeam”和“PetWalkTime”是单独的查询。然而,它们都是相关的,并且相互归属,就像这样:

<DogCare>
  <Facility>Twin Peaks</Facility>
  <Year>1992</Year>
  <Month>2</Month>
  <DogTeam>
    <Team>DogWalker</Team>
    <DogsWalked>24</DogsWalked>
    <TreatsGiven>900</TreatsGiven>
    <PetWalkTime>
        <Name>Palmer</Name>
        <FavoriteSnack>Cheese</FavoriteSnack>
        <FavThingtoDo>Chew Shoes</FavThingtoDo>
        <Day>1</Day>
        <DidBusiness>Yes</DidBusiness>
        <Barked>Constantly</Barked>
        <PulledonLeash>Whole Time</PulledonLeash>
        <DeservesTreat>Gave it Anyway</DeservesTreat>
    </PetWalkTime>
    <PetWalkTime>
         <Name>Laura</Name>
         <FavoriteSnack>Pie</FavoriteSnack>
         <FavThingtoDo>Fetch</FavThingtoDo>
         <Day>1</Day>
         <DidBusiness>Yes</DidBusiness>
         <Barked>No</Barked>
         <PulledonLeash>No</PulledonLeash>
         <DeservesTreat>Gave Several</DeservesTreat>
    </PetWalkTime>
  </DogTeam>
</DogCare>

有没有办法让最后一个出口成为可能?

【问题讨论】:

    标签: xml ms-access vba export ms-access-2010


    【解决方案1】:

    是的,Application.ExportXML 可以导出正确的嵌套 XML,前提是

    1. 您正在导出表(不是查询),并且
    2. 您已在 Access 中设置表之间的关系(也称为外键约束)

    如果不满足其中任何一个条件,那么即使您使用 MSDN 文章 here 中概述的方法,您仍然会获得“顺序”XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2014-11-21T13:43:50">
        <DogCare>
            <ID>1</ID>
            <Facility>Twin Peaks</Facility>
        </DogCare>
        <DogTeam>
            <TeamID>1</TeamID>
            <ParentID>1</ParentID>
            <Team>DogWalker</Team>
        </DogTeam>
        <PetWalkTime>
            <WalkID>1</WalkID>
            <TeamID>1</TeamID>
            <Name>Palmer</Name>
            <Age>7</Age>
        </PetWalkTime>
        <PetWalkTime>
            <WalkID>2</WalkID>
            <TeamID>1</TeamID>
            <Name>Laura</Name>
            <Age>5</Age>
        </PetWalkTime>
    </dataroot>
    

    但是,如果两个条件都满足,那么我们可以像这样得到“嵌套”XML

    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2014-11-21T13:52:50">
        <DogCare>
            <ID>1</ID>
            <Facility>Twin Peaks</Facility>
            <DogTeam>
                <TeamID>1</TeamID>
                <ParentID>1</ParentID>
                <Team>DogWalker</Team>
                <PetWalkTime>
                    <WalkID>1</WalkID>
                    <TeamID>1</TeamID>
                    <Name>Palmer</Name>
                    <Age>7</Age>
                </PetWalkTime>
                <PetWalkTime>
                    <WalkID>2</WalkID>
                    <TeamID>1</TeamID>
                    <Name>Laura</Name>
                    <Age>5</Age>
                </PetWalkTime>
            </DogTeam>
        </DogCare>
    </dataroot>
    

    使用这样的代码

    Option Compare Database
    Option Explicit
    
    Sub XmlExportTest()
        Dim objTeam As AdditionalData, objWalk As AdditionalData
        Set objTeam = Application.CreateAdditionalData
        Set objWalk = objTeam.Add("DogTeam")
        objWalk.Add "PetWalkTime"
        Application.ExportXML _
                ObjectType:=acExportTable, _
                DataSource:="DogCare", _
                DataTarget:="C:\Users\Gord\Desktop\DogData.xml", _
                AdditionalData:=objTeam
    End Sub
    

    【讨论】:

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