W LINQ to XML niezwykle proste:
XDocument doc = XDocument.Load("test.xml"); // Or whatever
var allElements = doc.Descendants();
więc znaleźć wszystkie elementy z konkretnego atrybutu, na przykład:
var matchingElements = doc.Descendants()
.Where(x => x.Attribute("foo") != null);
Zakładamy, że chcesz wszystkie elementy . Jeśli chcesz wszystkie węzły węzłów (w tym węzły tekstowe itp., Ale nie, w tym atrybuty jako oddzielne węzły), należy zamiast tego użyć DescendantNodes()
.
EDYCJA: Przestrzenie nazw w LINQ do XML są ładne. Można by użyć:
var matchingElements = doc.Descendants()
.Where(x => x.Attribute(XNamespace.Xmlns + "aml") != null);
lub do innej przestrzeni nazw:
XNamespace ns = "http://some.namespace.uri";
var matchingElements = doc.Descendants()
.Where(x => x.Attribute(ns + "foo") != null);
Jeśli chcesz sprawdzić pewne atrybuty, nie musisz przechodzić przez _wszysty węzeł_ (węzeł tekstowy, węzeł dokumentu, węzeł komentarza). Wystarczy przejść przez każdy węzeł elementu lub każdy węzeł atrybutu (tj. Za pomocą LINQ lub XSLT). Węzły elementów są jedynym typem węzła z atrybutami. – Abel
Jak duży jest ten dokument? Czy warto byłoby zoptymalizować? –
Zobacz linki [http://forums.asp.net/t/1285409.aspx/1](http://forums.asp.net/t/1285409.aspx/1) [http: //www.developerfusion .com/article/4078/reading-storing-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