2010-08-19 9 views

Respuesta

6

¿Qué tipo de "eficiencia" está buscando? ¿Eficiencia de expresión o eficiencia en el tiempo de ejecución? Aquí hay una consulta LINQ que encuentra la declaración bastante rápidamente:

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

Sospecho que será lo suficientemente eficiente. Es posible que pueda probar si el primer nodo hijo era XmlDeclaration ... No pensar cualquier cosa puede venir antes.

Si hay alguna posibilidad de usar LINQ to XML en su lugar, entonces se vuelve aún más fácil - solo usa la propiedad XDocument.Declaration.

+0

lo está recordando bien, la declaración no puede tener nada, incluido el espacio en blanco, anterior, lo que permite una mayor eficiencia tanto en la expresión como en la ejecución. –

8

Para comprobar que tiene uno:

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

Para obtenerlo si tiene uno:

XmlDeclaration dec = doc.FirstChild as XmlDeclaration; 

Recuerde que no hay contenido permitió antes de la declaración XML (salvo una lista de materiales, los cuales no se considera contenido, sino un artefacto de codificación en la transmisión, por lo que no tendrá un nodo correspondiente).

Cuestiones relacionadas