【问题标题】:Combine several XML file to one XML将多个 XML 文件合并为一个 XML
【发布时间】:2016-02-07 12:49:57
【问题描述】:

我有一堆 XML,我想从所有这些中生成 1 个 XML(格式相同)。

这是1.XML的一个例子

<?xml version="1.0" encoding="UTF-8"?>
<RootDTO xmlns:json='http://james.newtonking.com/projects/json'>
   <destination>
      <name>xxx</name>
   </destination>
   <orderData>                                         
      <items json:Array='true'>  
            <shipmentIndex Name="items"></shipmentIndex>
            <barcode>12345</barcode>                                                                                                       
      </items>  
      <misCode>9876543210</misCode>                                      
          <shipments>                                      
                <sourceShipmentId></sourceShipmentId>      
                <shipmentIndex Name="shipments"></shipmentIndex>                         
          </shipments>                         
   </orderData>
</RootDTO>

这个代表结合1.xml2.xml后的Result.xml-(和1.xml一模一样

<!-- Represent Result.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<RootDTO xmlns:json='http://james.newtonking.com/projects/json'>
   <destination>
      <name>xxx</name>
   </destination>
   <orderData>                                         
      <items json:Array='true'>  
            <shipmentIndex Name="items"></shipmentIndex>
            <barcode>12345</barcode>                                                                                                       
      </items>  

    <items json:Array='true'>     <!-- from 2.xml-->
            <shipmentIndex Name="items"></shipmentIndex>
            <barcode>12345</barcode>                                                                                                       
      </items>  


      <misCode>9876543210</misCode>                                      
          <shipments>                                      
                <sourceShipmentId></sourceShipmentId>      
                <shipmentIndex Name="shipments"></shipmentIndex>                         
          </shipments>     


      <shipments>       <!--From 2.xml-->                              
                <sourceShipmentId></sourceShipmentId>      
                <shipmentIndex Name="shipments"></shipmentIndex>                         
          </shipments>                             
   </orderData>
</RootDTO>

这样做的目的是将多个货物(一起,它们是 1 个订单)组合成 1 个代表完整订单的 XML。

类似这样的伪:

for(i=0; i< xmls.count()< i++)
{
   itemsElement.appendTo(xml[i].items);
   shipmentsElement.appendTo(xml[i].shipments);
}

我想要实现的是附加元素 - “items”和“shipments” 到 1 个 XML 中,代表一个订单。

我正在使用此代码让我的 XML 字符串:var xml = XElement.Parse(renderedOutput); 代表我的 XML 字符串

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    为了简化示例代码,我在同一个文档中添加了 3 次相同的 xml。您可以使用 Load 方法而不是 Parse 从文件而不是字符串中获取 xml。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            const int NUMBER_OF_XML = 3;
            static void Main(string[] args)
            {
                string xml =
                        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                         "<RootDTO xmlns:json='http://james.newtonking.com/projects/json'>" +
                           "<destination>" +
                              "<name>xxx</name>" +
                           "</destination>" +
                           "<orderData>" +
                              "<items json:Array='true'>" +
                                    "<shipmentIndex Name=\"items\"></shipmentIndex>" +
                                    "<barcode>12345</barcode>" +
                              "</items>" +
                              "<misCode>9876543210</misCode>" +
                                  "<shipments>" +
                                        "<sourceShipmentId></sourceShipmentId>" +
                                        "<shipmentIndex Name=\"shipments\"></shipmentIndex>" +
                                  "</shipments>" +
                           "</orderData>" +
                          "</RootDTO>";
    
                XDocument doc = null;
                XDocument addedDocs = null;
                for (int count = 0; count < NUMBER_OF_XML; count++)
                {
                    if (count == 0)
                    {
                        doc = XDocument.Parse(xml);
                    }
                    else
                    {
                        addedDocs = XDocument.Parse(xml);
                        XElement orderData = doc.Descendants("orderData").FirstOrDefault();
                        XElement addedOrderData = doc.Descendants("orderData").FirstOrDefault();
                        List<XElement> children = addedOrderData.Elements().ToList();
                        foreach (XElement element in children)
                        {
                            string tagName = element.Name.LocalName;
                            XElement lastElement = orderData.Elements(tagName).LastOrDefault();
                            if (lastElement == null)
                            {
                                orderData.Add(element);
                            }
                            else
                            {
                                lastElement.ReplaceWith(new XElement[] { lastElement, element});
                            }
                        }
                     }
                }
    
            }
        }
    }
    

    【讨论】:

    • 当我点击“运行代码 sn-p”时,什么也没有显示。你知道为什么吗?
    • 未指定语言 c#。代码将在 c# 中运行,它已经过测试。输出放在 doc 文档中。
    • 我要求提供一种解决方案,将每个项目附加到项目和货物之后,然后从我的问题中查看result.xml。可以修一下吗?
    • XML 订单没有任何区别。我更改了代码以按顺序添加项目,即使它没有任何区别。
    • 对我来说确实如此。我将其序列化为 JSON 并将其发送到仅接受一种结构的 API。
    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多