如何从xml文档中删除两个字符串之间的内容

本文关键字:字符串 两个 之间 xml 文档 删除 | 更新日期: 2023-09-27 18:14:35

我需要删除所有的内容之间,包括这两个以及。

我试过使用这个

newLines = RemoveLines(newLines, "<!-- ENHANCED -->", "<!-- /ENHANCED -->", true);
    private static List<string> RemoveLines(List<string> newLines, string startingLine, string endingLine, bool removeContents)
    {
        for (var i = 0; i < newLines.Count(); i++)
        {
            if (newLines[i].Trim() != startingLine.Trim()) continue;
            newLines.RemoveAt(i);
            if (removeContents)
                for (var j = i; newLines[j].Trim() != endingLine.Trim(); j++)
                {
                    newLines.RemoveAt(j);
                    j--;
                }
            newLines.RemoveAt(i);
        }
        return newLines;
    }

但是当两个字符串出现在同一行时,这不起作用。

我也试过使用xdocument。

var xdoc = XDocument.Load(file, LoadOptions.PreserveWhitespace);
    var nodes = xdoc.DescendantNodes();
    var newNodes = RemoveNodes(nodes, "<!-- ENHANCED -->", "<!-- /ENHANCED -->", true);
    var doc = new XDocument(newNodes);
    doc.Save(file);
private static IEnumerable<XNode> RemoveNodes(IEnumerable<XNode> nodes, string startingNode, string endingNode, bool removeBetweenNodes)
{
    var xNodes = nodes as IList<XNode> ?? nodes.ToList();
    for (var i = 0; i < xNodes.Count(); i++)
    {
        if (xNodes[i].ToString().Trim() != startingNode.Trim()) continue;
        xNodes.RemoveAt(i);
        if (removeBetweenNodes)
            for (var j = i; xNodes[j].ToString().Trim() != endingNode.Trim(); j++)
            {
                xNodes.RemoveAt(j);
                j--;
            }
        xNodes.RemoveAt(i);
    }
    return (IEnumerable<XNode>) xNodes;
}

失败是因为文件夹中缺少一些引用的.dtd文件。

这可以通过读取流然后应用正则表达式来完成吗?我不擅长正则表达式。有人能帮忙吗?

如何从xml文档中删除两个字符串之间的内容

试试这个

//var content = @"
//    header 
//        <!-- ENHANCED --> details <!-- /ENHANCED --> 
//    trailler
//
//    |
//
//    first 
//        <!-- ENHANCED --> 
//            second 
//        <!-- /ENHANCED --> 
//    third";
var content = File.ReadAllText("file.xml");
Console.WriteLine(Regex.Replace(content,
    @"<!-- ENHANCED -->['s'S]*?<!-- /ENHANCED -->", ""));

在XML文件中,序列<!-- ... -->定义了一个注释。

为了避免用XPath匹配它们的困难,该正则表达式将通过将XML文件作为纯文本处理,剥离两个序列之间的任何内容。

你需要确保替换不会破坏你的XML文档