我们如何搜索覆盖文件N行的XML注释?
时间:2020-03-05 18:59:39 来源:igfitidea点击:
我正在尝试查找带有大量已注释掉xml的xml文件。我想以编程方式搜索超出给定行数的xml注释。有一个简单的方法吗?
解决方案
回答
考虑到XML不使用基于行的格式,我们可能应该检查字符数。使用正则表达式,我们可以创建一个模式以匹配注释前缀,并在匹配第一个注释后缀之前匹配最少字符数。
http://www.regular-expressions.info/
这是在一些初步测试中起作用的模式:
<!-- (.[^-->]|[\r\n][^-->]){5}(.[^-->]|[\r\n][^-->])*? -->
它将匹配开始注释前缀以及包括换行符在内的所有内容(在Windows OS上),并且很懒,因此它将在第一个注释后缀处停止。
抱歉,修改是正确的,这里是一个更新的模式。它显然没有进行优化,但是在某些测试中,它似乎可以解决我们指出的错误。
回答
我正在使用此应用程序测试正则表达式:
http://www.regular-expressions.info/dotnetexample.html
我已经根据一些相当不错的数据对其进行了测试,并且似乎只提取了注释部分。
回答
我不确定行数,但是如果我们可以使用字符串的长度,则可以使用XPath进行操作。
static void Main(string[] args) { string[] myFiles = { @"C:\temp\XMLFile1.xml", @"C:\temp\XMLFile2.xml", @"C:\temp\XMLFile3.xml" }; int maxSize = 5; foreach (string file in myFiles) { System.Xml.XPath.XPathDocument myDoc = new System.Xml.XPath.XPathDocument(file); System.Xml.XPath.XPathNavigator myNav = myDoc.CreateNavigator(); System.Xml.XPath.XPathNodeIterator nodes = myNav.Select("//comment()"); while (nodes.MoveNext()) { if (nodes.Current.ToString().Length > maxSize) Console.WriteLine(file + ": Long comment length = " + nodes.Current.ToString().Length); } } Console.ReadLine(); }