【问题标题】:How to merge xml files into one file with two specific nodes using C#如何使用 C# 将 xml 文件合并到一个具有两个特定节点的文件中
【发布时间】:2020-08-25 19:06:45
【问题描述】:

xml1:

<filters>
    <folder>
        <text>
          FOLDER1
        </text>
        <filter>
          <text>
            FILTER1
          </text>
          <value>X</value>
        </filter>
        <filter>
          <text>
            FILTER2
          </text>
          <value>X</value>
        </filter>
    </folder>
</filters>

xml2:

<filters>
    <folder>
        <text>
          FOLDER2
        </text>
        <filter>
          <text>
            FILTER3
          </text>
          <value>X</value>
        </filter>
        <filter>
          <text>
            FILTER4
          </text>
          <value>X</value>
        </filter>
    </folder>
</filters>

xml3:

<filters>
    <folder>
        <text>
          FOLDER1
        </text>
        <filter>
          <text>
            FILTER5
          </text>
          <value>X</value>
        </filter>
        <filter>
          <text>
            FILTER6
          </text>
          <value>X</value>
        </filter>
    </folder>
</filters>

我想像这样合并:

<filters>
    <folder>
        <text>
          FOLDER1
        </text>
        <filter>
          <text>
            FILTER1
          </text>
          <value>X</value>
        </filter>
        <filter>
          <text>
            FILTER2
          </text>
          <value>X</value>
        </filter>
        
        <filter>
          <text>
            FILTER5
          </text>
          <value>X</value>
        </filter>
        <filter>
          <text>
            FILTER6
          </text>
          <value>X</value>
        </filter>
    </folder>
    
    <folder>
        <text>
          FOLDER2
        </text>
        <filter>
          <text>
            FILTER3
          </text>
          <value>X</value>
        </filter>
        <filter>
          <text>
            FILTER4
          </text>
          <value>X</value>
        </filter>
    </folder>
</filters>

我想使用 2 个特定的 xml 节点。有时我必须添加新的“文件夹”,但如果我有相同的“文件夹”(根据文件夹文本数据),我想添加到这个“文件夹”中。像xml3。可能吗?我怎样才能做到?它有办法吗? 我合并了这些 xml 文件,但就像一个新的“文件夹”一样。我无法按我的意愿合并。

【问题讨论】:

  • 我读过这个。所以这样写: var xml1 = XDocument.Load(xml1); var xml2 = XDocument.Load(xml2); xml1.Descendants("文件夹").LastOrDefault().AddAfterSelf(xml2.Descendants("文件夹")); xml1.保存(xml1);但是当我有相同的“文件夹”时,写为不同的节点。我不要它。

标签: c# xml merge


【解决方案1】:

尝试以下 xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FOLDER = @"c:\temp\test\";
        static void Main(string[] args)
        {
            //merged elements
            XElement newFilters = new XElement("filters");

            foreach (string filename in Directory.GetFiles(FOLDER, "*.xml"))
            {
                XDocument doc = XDocument.Load(filename);
                XElement filters = doc.Descendants("filters").FirstOrDefault();
                string folderName = ((string)filters.Element("folder").Element("text")).Trim();

                XElement newFolder = newFilters.Elements("folder").Where(x => ((string)x.Element("text")).Trim() == folderName).FirstOrDefault();
                if (newFolder == null)
                {
                    newFilters.Add(filters.Elements());
                }
                else
                {
                    List<XElement> xFilters = filters.Descendants("filter").ToList(); 
                    newFolder.Add(xFilters);
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-08-16
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2022-11-02
    • 2012-04-24
    相关资源
    最近更新 更多