C# C XML从另一个XML编辑和添加
我想在C中加载和比较条目,如果它们不存在,则添加它们,但不应添加某些异常 我寻找类似的问题,但找不到解决问题的方法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
使用联接和左外联接将起作用
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);
}
}
}
}
}
}