C# C XML从另一个XML编辑和添加

C# C XML从另一个XML编辑和添加,c#,xml,edit,xml.modify,C#,Xml,Edit,Xml.modify,我想在C中加载和比较条目,如果它们不存在,则添加它们,但不应添加某些异常 我寻找类似的问题,但找不到解决问题的方法 使用联接和左外联接将起作用 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; namespace ConsoleApplication1 { class Program

我想在C中加载和比较条目,如果它们不存在,则添加它们,但不应添加某些异常

我寻找类似的问题,但找不到解决问题的方法


使用联接和左外联接将起作用

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

namespace ConsoleApplication1
{
    class Program
    {
        const string NEW_FILENAME = @"c:\temp\test.xml";
        const string OLD_FILENAME = @"c:\temp\test1.xml";
        static void Main(string[] args)
        {
            XDocument newDoc = XDocument.Load(NEW_FILENAME);
            XDocument oldDoc = XDocument.Load(OLD_FILENAME);

            var query = (from oD in oldDoc.Descendants("file-manager").Elements()
                         join nD in newDoc.Descendants("file-manager").Elements() on oD.Name.LocalName equals nD.Name.LocalName
                         select new { name =  oD.Name.LocalName, oldDoc = oD, newDoc = nD })
                         .ToList();

            foreach (var part in query)
            {
                //left outer join
                var q = (from oldPart in part.oldDoc.Descendants("mount-point")
                         join newPart in part.newDoc.Descendants("mount-point") on (string)oldPart.Attribute("alias") equals (string)newPart.Attribute("alias") into ps
                         from newPart in ps.DefaultIfEmpty()
                         select new { newPart = newPart, oldPart = oldPart })
                        .ToList();

                XElement newMountPoint = part.newDoc.Descendants("mount-points").FirstOrDefault(); 

                foreach (var point in q)
                {
                    if (point.newPart == null)
                    {
                        newMountPoint.Add(point.oldPart);
                    }
                }
            }

        }
    }
}

如果我理解您的问题,您需要读取和解析两个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 string NEW_FILENAME = @"c:\temp\test.xml";
        const string OLD_FILENAME = @"c:\temp\test1.xml";
        static void Main(string[] args)
        {
            XDocument newDoc = XDocument.Load(NEW_FILENAME);
            XDocument oldDoc = XDocument.Load(OLD_FILENAME);

            var query = (from oD in oldDoc.Descendants("file-manager").Elements()
                         join nD in newDoc.Descendants("file-manager").Elements() on oD.Name.LocalName equals nD.Name.LocalName
                         select new { name =  oD.Name.LocalName, oldDoc = oD, newDoc = nD })
                         .ToList();

            foreach (var part in query)
            {
                //left outer join
                var q = (from oldPart in part.oldDoc.Descendants("mount-point")
                         join newPart in part.newDoc.Descendants("mount-point") on (string)oldPart.Attribute("alias") equals (string)newPart.Attribute("alias") into ps
                         from newPart in ps.DefaultIfEmpty()
                         select new { newPart = newPart, oldPart = oldPart })
                        .ToList();

                XElement newMountPoint = part.newDoc.Descendants("mount-points").FirstOrDefault(); 

                foreach (var point in q)
                {
                    if (point.newPart == null)
                    {
                        newMountPoint.Add(point.oldPart);
                    }
                }
            }

        }
    }
}