Как проверить наличие XmlDeclaration в XmlDocument C#

#c# #xml

#c# #xml

Вопрос:

Какой более эффективный способ проверить XmlDocument на наличие узла XmlDeclaration?

Ответ №1:

Чтобы проверить, что у него есть один:

 bool hasDec = doc.FirstChild.NodeType == XmlNodeType.XmlDeclaration;
  

Чтобы получить его, если он у нее есть:

 XmlDeclaration dec = doc.FirstChild as XmlDeclaration;
  

Помните, что до объявления XML содержимое не разрешено (за исключением спецификации, которая считается не содержимым, а артефактом кодирования в потоке, поэтому не будет иметь соответствующего узла).

Ответ №2:

Какого рода «эффективность» вам нужна? Эффективность выражения или эффективность во время выполнения? Вот запрос LINQ, который довольно быстро находит объявление:

 XmlDeclaration declaration = doc.ChildNodes
                                .OfType<XmlDeclaration>()
                                .FirstOrDefault();
  

Я сильно подозреваю, что это будет достаточно эффективно. Возможно, вы могли бы просто проверить, был ли первый дочерний узел XmlDeclaration … Я не думаю, что что-либо еще может предшествовать этому.

Если есть какая-либо возможность использовать LINQ to XML вместо этого, то это становится еще проще — вы просто используете XDocument.Declaration свойство.

Комментарии:

1. вы правильно помните, перед объявлением не должно быть ничего, включая пробелы, что обеспечивает большую эффективность как в выражении, так и в выполнении.