Как вы ищете XML-комментарий, охватывающий N строк файла? - PullRequest
0 голосов
/ 17 сентября 2008

Я пытаюсь найти xml-файлы с большими полосами закомментированного xml. Я хотел бы программно искать комментарии XML, которые выходят за рамки заданного количества строк. Есть ли простой способ сделать это?

Ответы [ 3 ]

1 голос
/ 20 сентября 2008

Я не уверен насчет количества строк, но если вы можете использовать длину строки, вот кое-что, что будет работать с использованием 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();
}
1 голос
/ 17 сентября 2008

Учитывая, что XML не использует формат строки, вам, вероятно, следует проверить количество символов. С помощью регулярного выражения вы можете создать шаблон, соответствующий префиксу комментария и минимальному количеству символов, прежде чем он совпадет с суффиксом первого комментария.

http://www.regular -expressions.info /

Вот шаблон, который работал в некоторых предварительных тестах:

<!-- (.[^-->]|[\r\n][^-->]){5}(.[^-->]|[\r\n][^-->])*? -->

Он будет соответствовать начальному префиксу комментария и всему, включая символ новой строки (в ОС Windows), и будет ленивым, поэтому остановится на суффиксе первого комментария.

Извините за правки, вы правы, вот обновленный шаблон. Он явно не оптимизирован, но в некоторых тестах он, похоже, устраняет указанную вами ошибку.

0 голосов
/ 17 сентября 2008

Я использую это приложение для проверки регулярных выражений:

http://www.regular -expressions.info / dotnetexample.html

Я проверил его на некоторых довольно хороших данных, и он, кажется, вытаскивает только закомментированный раздел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...