如何从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文件。
这可以通过读取流然后应用正则表达式来完成吗?我不擅长正则表达式。有人能帮忙吗?
试试这个
//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文档