c#遍历目录,在每个目录中查找XML,如果&;用&;amp;-拯救

本文关键字:amp 拯救 如果 遍历 查找 XML | 更新日期: 2023-09-27 18:25:07

我很想让XML正确写入,但文件是从第三方提交给我们的,我们无法控制它。(他们是我们客户的另一家供应商)

因此,考虑到这一点:他们向我们发送了一个文件夹和子文件夹的zip(在每个子文件夹中都会有一个XML)他们发送给我们的XML具有&代替&amp(每个&都是这样,但不是每个XML都会有一个&);使用我的代码,我可以(至少在控制台上)循环遍历每个子,找到xml,找到带有&(如果有)并将其更改为&

foreach (string d in Directory.GetFiles(targetDirectory, "*.xml", SearchOption.AllDirectories))
            {
                Console.WriteLine(d);
                String[] lines = File.ReadAllLines(d);
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("&"))
                    {
                        string line = lines[i];
                        line = line.Replace("&", "&amp;");
                        Console.WriteLine(line);
                    }
                }
            }

在最后一个"Console.WriteLine(line);"中;已更改(至少在内存中),但当我使用"System.IO.File"时,如果仍使用原始&。

c#遍历目录,在每个目录中查找XML,如果&;用&;amp;-拯救

为了节省键入的时间,而不是循环,请执行以下操作:

lines = lines.Select(x => x.Replace("&", "&amp")).ToArray();
foreach (string d in Directory.GetFiles(targetDirectory, "*.xml", SearchOption.AllDirectories))
{
    String[] lines = File.ReadAllLines(d);
    for (int i = 0; i < lines.Length; i++)
    {
        if (lines[i].Contains("&"))
        {
            lines[i] = lines[i].Replace("&", "&amp;");                             
        }
    }
    System.IO.File.WriteAllLines(d, lines);
}

正如Joe在评论中提到的,您的原始代码是在文件中的行循环期间写入文件的。我还将file.WriteAllLines()中的硬编码文件路径替换为foreach变量