Golang - 将数据从一个复杂的结构映射到另一个结构

时间:2015-08-18 13:20:22

标签: xml dictionary struct go

我使用Go结构来表示两个结构不同的XML文档。 一个XML文档是正在处理的数据的来源,另一个XML文档是源应映射到的目标。

我已经在Go结构中映射了两个XML文档,并且都知道如何编组/解组XML结构。

所以目前我正在键入每个结构中的每个路径,将源中的字段映射到目标中的字段。

是否有更快的方法来初始化新的Target实例,使用某种简写来简化数据映射?请记住,这些都是复杂的嵌套结构,因此我可以遵循一种模式,直到#34;会很棒。

编辑:添加示例XML数据结构

表示这些XML结构的Go结构几乎是XML结构的一对一表示,其中每个嵌套级别都是一种新的结构类型。这些结构是以编程方式生成的,并且非常分散,因此在这里表示数据结构需要花费过多的精力(我的时间很短)。

SOURCE数据文件 - 最多可达到8个嵌套元素。可以有多个元素,每个元素都会生成一个新的单独的" TARGET"实例

<orders>
  <order order=no="111222333">
    <customer>
      <customer-no>555444333</customer-no>
      <customer-email>test@test.com</customer-email>
      <billing-address>
        <first-name>Test</first-name>
        <last-name>User</last-name>
      </billing-address>
    </customer>
    <product-lineitems>
      <product-lineitem>
        <product-id>SomeProductSku</product-id>
        <product-name>SomeProductName</product-name>
        <base-price>40.00</base-price>
        <quantity>1</quantity>
      </product-lineitem>
    </product-lineitems>
  </order>
</orders>

TARGET数据文件 - 最多可达10个嵌套元素

<OrderCreateRequest orderType="SALES" requestId="bcHcsiaagLwM6aaadnXz7ifXZL">
    <Order customerOrderId="111222333" levelOfService="REGULAR">
        <Customer customerId="555444333">
            <Name>
                <LastName>User</LastName>
                <FirstName>Test</FirstName>
            </Name>
            <EmailAddress>test@test.com</EmailAddress>
        </Customer>
        <OrderItems>
            <OrderItem id="item_0_1" webLineId="1">
                <ItemId>SomeProductSku</ItemId>
                <Quantity>1</Quantity>
                <Description>
                    <Description>SomeProductName</Description>
                </Description>
                <Pricing>
                    <Merchandise>
                        <UnitPrice>40.00</UnitPrice>
                    </Merchandise>
                </Pricing>
            </OrderItem>
        </OrderItems>
    </Order>
</OrderCreateRequest>

编辑2:我也试图解决不匹配的类型映射。目前我正在分配每个值类型,这使我真正意识到错误的方式。 XML&lt; - &gt;结构表示已经构建,所以如果只是我需要以某种方式使用map [string] {interface {}}之类的东西来初始化Target结构,请告诉我。自从我上次看Go以来已经有一段时间了,所以我确定我在这里错过了一些更好的解决方案

0 个答案:

没有答案