En LINQ to XML es muy fácil:
XDocument doc = XDocument.Load("test.xml"); // Or whatever
var allElements = doc.Descendants();
Así que para encontrar todos los elementos con un atributo particular, por ejemplo:
var matchingElements = doc.Descendants()
.Where(x => x.Attribute("foo") != null);
Eso es suponiendo que usted quería todos los elementos . Si quiere todos los nodos (incluidos los nodos de texto, etc., pero no incluyendo atributos como nodos separados) usaría DescendantNodes()
en su lugar.
EDITAR: Los espacios de nombres en LINQ to XML son agradables. Tendrá que utilizar:
var matchingElements = doc.Descendants()
.Where(x => x.Attribute(XNamespace.Xmlns + "aml") != null);
o para un espacio de nombres diferentes:
XNamespace ns = "http://some.namespace.uri";
var matchingElements = doc.Descendants()
.Where(x => x.Attribute(ns + "foo") != null);
Si necesita verificar ciertos atributos, no necesita pasar por cada nodo_ (nodo de texto, nodo de documento, nodo de comentario). Simplemente revise cada nodo de elemento o cada nodo de atributo (es decir, con LINQ o XSLT). Los nodos de elemento son el único tipo de nodo con atributos. – Abel
¿Qué tan grande es este documento? Vale la pena optimizar? –
Ver los enlaces [http://forums.asp.net/t/1285409.aspx/1](http://forums.asp.net/t/1285409.aspx/1) [http: //www.developerfusion .com/article/4078/reading-storage-and-transforming-xml-data-in-net/5 /] (http://www.developerfusion.com/article/4078/reading-storing-and-transforming-xml -data-in-net/5 /) [http://weblogs.asp.net/karan/archive/2010/04/29/parse-an-xml-file.aspx](http://weblogs.asp. net/karan/archive/2010/04/29/parse-an-xml-file.aspx) – Prasanth