我想在单个XDocument对象中合并几个XML文件。合并XDocument中的XML文件
合并在XDocument对象中不存在。我想念这个。
是否有人已经为XDocument或类似的东西实现了合并扩展方法?
我想在单个XDocument对象中合并几个XML文件。合并XDocument中的XML文件
合并在XDocument对象中不存在。我想念这个。
是否有人已经为XDocument或类似的东西实现了合并扩展方法?
我尝试了一下自己:
var MyDoc = XDocument.Load("File1.xml");
MyDoc.Root.Add(XDocument.Load("File2.xml").Root.Elements());
我不知道是好还是坏,但它工作正常,我:-)
作为一种解决方法,您可以使用XSL文件合并XML文件,然后将其转换为XDocument对象。
务实,XDocument
VS XmLDocument
并非全有或全无(除非你是Silverlight的) - 所以,如果XmlDoucument
做你需要的东西,而XDocument
没有,那么也许使用XmlDocument
(与ImportNode
等)。
这就是说,即使有XDocument
,你大概可以使用XNode.ReadFrom
导入的每个,然后只需.Add
它的主要收藏。
当然,如果文件很大,XmlReader/XmlWriter
可能更有效率......但更复杂。幸运的是,XmlWriter
有一个WriteNode
方法,该方法接受XmlReader
,因此您可以导航到XmlReader
中的第一个孩子,然后将其闪光到输出文件。喜欢的东西:
static void AppendChildren(this XmlWriter writer, string path)
{
using (XmlReader reader = XmlReader.Create(path))
{
reader.MoveToContent();
int targetDepth = reader.Depth + 1;
if(reader.Read()) {
while (reader.Depth == targetDepth)
{
writer.WriteNode(reader, true);
}
}
}
}
合并所有XML文件from dir to one XDocument
public static XDocument MergeDir(string xmlDir)
{
XDocument xdoc = XDocument.Parse("<root></root>");
System.IO.DirectoryInfo directory = new DirectoryInfo(xmlDir);
if (directory.Exists)
{
foreach (System.IO.FileInfo file in directory.GetFiles())
{
if (file.Extension == ".xml")
{
xdoc.Root.Add(XDocument.Load(file.FullName).Root.Elements());
}
}
}
return xdoc;
}
谢谢。对不起,我讨厌XSL。我肯定会更喜欢基于C#代码的解决方案。 – Larry 2008-11-11 08:24:26
没问题,我了解XSL避免,因为它有时可能会非常混乱。 – schnaader 2008-11-11 08:32:32