【问题标题】:Append an xml file to another xml file C# [duplicate]将一个xml文件附加到另一个xml文件C#[重复]
【发布时间】:2015-07-13 20:04:43
【问题描述】:

我有两个 XML 文件: 订单列表.xml

  <ListOrderItemsResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
      <ListOrderItemsResult>
        <AmazonOrderId>102-7574501-6521843</AmazonOrderId>
        <OrderItems>
          <OrderItem>
            <ASIN>B00PBOOX6C</ASIN>
            <SellerSKU>OJ-J0CO-4SEH</SellerSKU>
            <OrderItemId>03136321944794</OrderItemId>
            <Title>Nitric Acid 70% , ACS, REAGENT Grade, Alliance Chemical Brand, 2.5 Liter(7 Lbs) Bottle</Title>
            <QuantityOrdered>1</QuantityOrdered>
            <QuantityShipped>0</QuantityShipped>
            <ItemPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>108.00</Amount>
            </ItemPrice>
            <ShippingPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>27.00</Amount>
            </ShippingPrice>
            <GiftWrapPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </GiftWrapPrice>
            <ItemTax>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </ItemTax>
            <ShippingTax>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </ShippingTax>
            <GiftWrapTax>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </GiftWrapTax>
            <ShippingDiscount>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </ShippingDiscount>
            <PromotionDiscount>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </PromotionDiscount>
            <PromotionIds />
            <ConditionId>New</ConditionId>
            <ConditionSubtypeId>New</ConditionSubtypeId>
          </OrderItem>
        </OrderItems>
      </ListOrderItemsResult>
      <ResponseMetadata>
        <RequestId>2b407071-501d-45a2-9baa-2f5ec24f61e7</RequestId>
      </ResponseMetadata>
    </ListOrderItemsResponse>

和orderlist2.xml:

    <ListOrderItemsResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
      <ListOrderItemsResult>
        <AmazonOrderId>112-5324115-6814611</AmazonOrderId>
        <OrderItems>
          <OrderItem>
            <ASIN>B00PGF7U6G</ASIN>
            <SellerSKU>60-JOUW-Q8HA</SellerSKU>
            <OrderItemId>19976596962514</OrderItemId>
            <Title>Nitric Acid 70% , ACS REAGENT GRADE, 2.5 Liter(7 Lbs) Bottle</Title>
            <QuantityOrdered>1</QuantityOrdered>
            <QuantityShipped>0</QuantityShipped>
            <ItemPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>108.00</Amount>
            </ItemPrice>
            <ShippingPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>27.00</Amount>
            </ShippingPrice>
            <GiftWrapPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </GiftWrapPrice>
            <ItemTax>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </ItemTax>
            <ShippingTax>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </ShippingTax>
            <GiftWrapTax>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </GiftWrapTax>
            <ShippingDiscount>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </ShippingDiscount>
            <PromotionDiscount>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>0.00</Amount>
            </PromotionDiscount>
            <PromotionIds />
            <ConditionId>New</ConditionId>
            <ConditionSubtypeId>New</ConditionSubtypeId>
          </OrderItem>
        </OrderItems>
      </ListOrderItemsResult>
      <ResponseMetadata>
        <RequestId>e9e67246-c07d-4bf0-825b-929cd37c694f</RequestId>
      </ResponseMetadata>
    </ListOrderItemsResponse>

合并后的 XML 文件如下所示:

<AmazonOrderId>112-5324115-6814611</AmazonOrderId>
<OrderItems>
    <OrderItem>
        <ASIN>B00PGF7U6G</ASIN>
        <SellerSKU>60-JOUW-Q8HA</SellerSKU>
        <OrderItemId>19976596962514</OrderItemId>
        <Title>Nitric Acid 70% , ACS REAGENT GRADE, 2.5 Liter(7 Lbs) Bottle</Title>
        <QuantityOrdered>1</QuantityOrdered>
        <QuantityShipped>0</QuantityShipped>
        <ItemPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>108.00</Amount>
        </ItemPrice>
        <ShippingPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>27.00</Amount>
        </ShippingPrice>
        <GiftWrapPrice>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
        </GiftWrapPrice>
        <ItemTax>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
        </ItemTax>
        <ShippingTax>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
        </ShippingTax>
        <GiftWrapTax>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
        </GiftWrapTax>
        <ShippingDiscount>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
        </ShippingDiscount>
        <PromotionDiscount>
            <CurrencyCode>USD</CurrencyCode>
            <Amount>0.00</Amount>
        </PromotionDiscount>
        <PromotionIds />
        <ConditionId>New</ConditionId>
        <ConditionSubtypeId>New</ConditionSubtypeId>
    </OrderItem>
    <OrderItem>
        <Title>Nitric Acid 70% , ACS REAGENT GRADE, 2.5 Liter(7 Lbs)</Title>
        <QuantityOrdered>1</QuantityOrdered>
        <ItemPrice>
            <Amount>108.00</Amount>
        </ItemPrice>
        <ShippingPrice>
            <Amount>27.00</Amount>
        </ShippingPrice>
    </OrderItem>
</OrderItems>undefined</ListOrderItemsResult>undefined<ResponseMetadata>
<RequestId>e9e67246-c07d-4bf0-825b-929cd37c694f</RequestId>undefined</ResponseMetadata>

我想将第二个文件附加到第一个文件,但我想从第二个文件中获取的唯一元素是 &lt;Title&gt;、&lt;QuantityOrdered&gt;、&lt;ItemPrice&gt;、&lt;Amount&gt;、&lt;ShippingPrice&gt;、&lt;Amount&gt;。我认为父元素是,数据应该封装在&lt;OrderItem&gt; 标签中。我该怎么做?

【问题讨论】:

  • 如果你直接追加,它将不是有效的 XML。
  • 解析XML,组合内容并写出来。
  • @cubrr 我认为这根本没有意义。组合内容也可能导致错误的结果。也许它是有效的 xml,但结构失去了意义。起初我以为您可以将所有 OrderItem 组合在一个 OrderItems 节点中,但随后您将失去唯一的 AmazonOrderId。因此,必须在树中向上移动一个节点。那将是 ListOrderItemsResult。但顾名思义,它不是一个列表。因此,如果不失去语义,就不可能在一个文档中结合订单。
  • 不清楚你期望的结果是什么样的 - 正如已经说过的,你不能把这两者结合在一起。
  • 为什么这不是有效的 XML?我有一个亚马逊 API,每次调用一次只能获取一个订单。但是我需要收集所有订单,所以我需要迭代调用函数并返回 XML 字符串,然后每次都将其附加到文件中 - 以创建订单列表。

标签: c# xml


【解决方案1】:

如果您只是读取文件并将一个附加到另一个,它将不是有效的 Xml。我假设您的意思是从一个中获取根元素的所有子节点,并将它们附加到另一个。这意味着您必须同时加载 XmlDocuments,并将节点从第二个文档导入到第一个文档。

using System.Xml;

class Program
{
    static void Main(string[] args) 
    {
        XmlDocument list1 = new XmlDocument();
        XmlDocument list2 = new XmlDocument();
        list1.Load("orderlist.xml");
        list2.Load("orderlist2.xml");
        foreach (XmlNode childOfSecond in list2.DocumentElement.ChildNodes)
        {
            XmlNode childOfFirst = list1.ImportNode(childOfSecond, true);
            list1.DocumentElement.AppendChild(childOfFirst);
        }
        list1.Save("orderlist3.xml");
    }
}

【讨论】:

  • 这将得到一个相当奇怪的 XML 结构(它基本上将第二个文件“嵌入”到第一个文件中)。我不认为这里需要什么特别清楚。顺便说一句,我建议不要使用 XmlDocument,除非您有特殊需要 - LINQ to XML 是一个更好的 API。
  • @CharlesMager 你说得对,我不确定他需要做什么,但这似乎是一个简单直接的解决方案。无论如何,我从未使用过 LINQ to XML API,也没有真正研究过利弊(我从 Linq 出现之前就一直在使用 XmlDocument,我想旧习惯很难改掉)。跨度>
  • 我正在尝试使用我的所有订单创建一个文件,因为亚马逊 API 一次只允许我请求一件商品。为此,我需要为每个产品迭代函数调用——要求用户输入订单 ID。
  • @DanielTaki 好吧,您可能想指定一个新的根节点,并让每个 xml 文档都有自己的子节点。
  • @CharlesMager 是的,你试图将这两者结合在一起是对的,因为我试过了,但它抛出了一个错误。我不需要整个第二个文件。我只想要&lt;Title&gt;、&lt;QuantityOrdered&gt;、&lt;ItemPrice&gt;、&lt;Amount&gt;、&lt;ShippingPrice&gt;、&lt;Amount&gt; 标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2019-08-15
相关资源
最近更新 更多