C# 从XML文件中删除字符行

C# 从XML文件中删除字符行,c#,xml,line,C#,Xml,Line,我有一些XML文件,其中包含要从文件中删除的带有字符串垃圾的行。 我正在搜索一个可以这样做的代码,有人能帮我吗 <value key="EE_BELL_TIME"> <val name="Siren Time" show="1" type="BYTE" size="8" poff="260" psize="8" pbitoff="0" /> <posvalues> <pval name="1 minute" num="1" />

我有一些XML文件,其中包含要从文件中删除的带有字符串垃圾的行。 我正在搜索一个可以这样做的代码,有人能帮我吗

<value key="EE_BELL_TIME">
  <val name="Siren Time" show="1" type="BYTE" size="8" poff="260" psize="8" pbitoff="0" />
  <posvalues>
    <pval name="1 minute" num="1" />
    zeqmmzv
    <pval name="3 minutes" num="3" />
    <pval name="4 minutes" num="4" />
    <pval name="8 minutes" num="8" />
    fmengu
    <pval name="10 minutes" num="10" />
    <pval name="15 minutes" num="15" />
    p
    <pval name="20 minutes" num="20" />
  </posvalues>
</value>

您可以用一种非常简单的方法来完成:

 string[] lines = File.ReadAllLines(xmlPath);
 File.WriteAllLines(xmlPath, lines.Where(l => l.StartsWith("<") && l.EndsWith(">")));
这只是一个非常简单的解决方案,但它应该适用于xml文件

更新代码

Encoding encoding = Encoding.GetEncoding(1252);
        string[] lines = File.ReadAllLines(xmlFile, encoding);
        List<string> result = lines.Select(line => line.TrimStart().TrimEnd()).Where(trim => trim.StartsWith("<") && trim.EndsWith(">")).ToList();
        File.WriteAllLines("XmlFile2.xml", result, encoding);
更新以不修剪线条:

Encoding encoding = Encoding.GetEncoding(1252);
        string[] lines = File.ReadAllLines(xmlFile, encoding);
        List<string> result = (from line in lines let trim = line.TrimStart().TrimEnd() where trim.StartsWith("<") && trim.EndsWith(">") select line).ToList();
        File.WriteAllLines("XmlFile2.xml", result, encoding);
在C中,可以使用正则表达式作为查找XML标记的解决方案,如下所示:

class Program
{
    static void Main(string[] args)
    {
        // Open and read into a string the file containing the XML
        string s = System.IO.File.ReadAllText("file.xml");

        // You have too match (?>\<).*(?>\>), which also removes the line feeds
        var matches = Regex.Matches(s, @"(?>\<).*(?>\>)");

        // Use a StringBuilder to append the matches
        var sBuilder = new StringBuilder();

        // Loop through the matches
        foreach (Match item in matches)
        {
            sBuilder.Append(item.Value);
        }

        // Show the result
        Console.WriteLine(sBuilder.ToString());
    }
}

不知道这是否是一个快速的解决方案,但也许可以使用一个正则表达式来定义标记以及标记包含的内容,如属性和其他内容,然后获取匹配集合并将其全部写入一个新文件,我认为这将是最简单的方法。如果XML没有换行符,那么截取的代码将失败。正如我所说:这是一个非常简单的解决方案,但它应该适用于所提供的xml。可能还有更好的方法,当我运行Tomtom user代码并将内容保存到新的XML文件时,它会将内容保存到一个空的XML文件中,为什么?我之前或之后忘记做什么了?我更新了代码。我用你的xml用这段代码试过了,效果很好fine@Tomtom好的,现在它工作得更好了,但是它没有保留每行开头的空格和制表符,在结果文件中,所有标记父子在每一行的起始位置都是相同的0。如果XML有嵌套元素呢?在这种情况下,正则表达式可以工作吗?就此而言,它可以工作吗?建议的答案适用于包含嵌套元素的给定示例。我刚刚检查了它,是的,它可以工作。