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

C# 在同一文件夹中处理多个XML文件,并使用c保存它们#,c#,xml,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)

我试图从文件夹中的多个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);

}

处理完文件后如何保存?

类似这样的内容如何:

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);
}

关于,

编辑:我想我理解你的问题

您正在某个文件夹中循环浏览每个文档,然后在对另一个文件夹进行某些编辑后,是否要保存每个文件

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


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

那么,保存文件的哪一部分是您坚持的?现在还不清楚问题是什么…谢谢你,泰特。但是当我尝试使用
doc.Save(“E:\\”+文件)时我得到一个异常(不支持给定路径的格式),这是因为“file”变量包含绝对路径,而不仅仅是文件名。这就是回报。这意味着您的“file”变量以“C:\..”开头,它试图像这样保存文件:“E:\C:\your\Path.xml”,这显然不是一个格式良好的路径,并且是错误源。尝试这样做:`doc.Save(“E:\\”+Path.GetFileName(file))`。这将使用相同的文件名将文件保存在E:\root中。如果对你们有用,请别忘了把它标记为答案,干杯。
doc.Save(string.Format(@"E:\new{0}.xml", counter);
++counter; // new number for next file