我们如何搜索覆盖文件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();
}