#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. вы правильно помните, перед объявлением не должно быть ничего, включая пробелы, что обеспечивает большую эффективность как в выражении, так и в выполнении.