Каков более эффективный способ проверки XmlDocument для узла XmlDeclaration?
Какого рода «эффективность» вам нужна? Эффективность выражения или эффективность во время выполнения? Вот LINQ-запрос, который довольно быстро находит объявление:
XmlDeclaration declaration = doc.ChildNodes
.OfType<XmlDeclaration>()
.FirstOrDefault();
Я сильно подозреваю, что он будет достаточно эффективным. Возможно, вы могли просто проверить, был ли первый дочерний узел XmlDeclaration
... Я не думаю, что что-то еще может появиться перед ним.
Если есть возможность использовать вместо этого LINQ to XML, это станет еще проще - вы просто воспользуетесь свойством XDocument.Declaration
.
Для проверки наличия:
bool hasDec = doc.FirstChild.NodeType == XmlNodeType.XmlDeclaration;
Для получения, если есть:
XmlDeclaration dec = doc.FirstChild as XmlDeclaration;
Помните, что до объявления XML не допускается содержание (за исключением BOM, который не считается содержанием, а является артефактом кодирования в потоке, поэтому не имеет соответствующего узла).