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





Учитывая, что XML не использует линейный формат, вам, вероятно, следует проверить количество символов. С помощью регулярного выражения вы можете создать шаблон, который будет соответствовать префиксу комментария и соответствовать минимальному количеству символов, прежде чем он совпадет с первым суффиксом комментария.
http://www.regular-expressions.info/
Вот образец, который работал в некоторых предварительных тестах:
<!-- (.[^-->]|[\r\n][^-->]){5}(.[^-->]|[\r\n][^-->])*? -->
Он будет соответствовать начальному префиксу комментария и всему, включая символ новой строки (в ОС Windows), и он ленив, поэтому он остановится на первом суффиксе комментария.
Извините за правки, вы правы, вот обновленный шаблон. Очевидно, что он не оптимизирован, но в некоторых тестах кажется, что устраняет указанную вами ошибку.
Я использую это приложение для проверки регулярного выражения:
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();
}
Что вы используете для поиска?