在同一文件夹中处理多个XML文件并使用c#保存它们

时间:2016-03-03 13:06:04

标签: c# xml

我试图从文件夹中的多个XML文件中提取soap:Body的内容。它适用于单个文件,如下所示:

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
doc.LoadXml(doc.DocumentElement.SelectSingleNode("soap:Body", mgr).ChildNodes[0].OuterXml);
doc.Save(@"E:\new.xml");

要对多个文件执行相同操作,我使用以下代码:

XmlDocument xDoc = new XmlDocument();
string path = @"C:\Folder";
foreach (string file in Directory.EnumerateFiles(path, "*.xml"))
{
    xDoc.Load(Path.Combine(Directory.GetCurrentDirectory(), file));
    XmlNamespaceManager mgr = new XmlNamespaceManager(xDoc.NameTable);
    mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
    xDoc.LoadXml(xDoc.DocumentElement.SelectSingleNode("soap:Body", mgr).ChildNodes[0].OuterXml);

}

如何在处理文件后保存文件?

2 个答案:

答案 0 :(得分:0)

这样的事情:

XmlDocument xDoc = new XmlDocument();
string path = @"C:\Folder";
foreach (string file in Directory.EnumerateFiles(path, "*.xml"))
{
   xDoc.Load(Path.Combine(Directory.GetCurrentDirectory(), file));
   XmlNamespaceManager mgr = new XmlNamespaceManager(xDoc.NameTable);
   mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
   xDoc.LoadXml(xDoc.DocumentElement.SelectSingleNode("soap:Body", mgr).ChildNodes[0].OuterXml);
   doc.Save("E:\\" + file);
}

此致

答案 1 :(得分:0)

编辑:我想我理解你的要求。

您正在循环某个文件夹中的每个文档,然后您想在对某个文件夹进行一些编辑后保存每个文件吗?

你可以在foreach循环中添加一些变量作为计数器,并使用Save()方法(这样每个文件都用新名称保存):

doc.Save(string.Format(@"E:\new{0}.xml", counter);
++counter; // new number for next file

或者您可以使用TaiT的答案并保存每个文件与原始文件同名。