题
我正在尝试在单个XDocument对象中合并多个XML文件。
XDocument对象中不存在合并。我想念这个。
是否有人已经为XDocument实现了Merge扩展方法,或类似的东西?
解决方案
我自己尝试了一下:
var MyDoc = XDocument.Load("File1.xml");
MyDoc.Root.Add(XDocument.Load("File2.xml").Root.Elements());
我不知道它是好还是坏,但它对我来说很好: - )
其他提示
务实, 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文件从dir合并到一个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文件合并XML文件,然后将其转换为XDocument对象。
不隶属于 StackOverflow