Здравствуйте, koodeer, Вы писали:
K>Здравствуйте, Аноним.
K>Загружаем xml в XDocument. Получаем коллекцию потомков. Выводим все атрибуты.
K>K>var text = @"<?xml version=""1.0"" encoding=""UTF-8""?><xsd:schema xmlns:cite=""http://www.opengeospatial.net/cite"" xmlns:gml=""http://www.opengis.net/gml"" xmlns:it.geosolutions=""http://www.geo-solutions.it"" xmlns:nurc=""http://www.nurc.nato.int"" xmlns:sde=""http://geoserver.sf.net"" xmlns:sf=""http://www.openplans.org/spearfish"" xmlns:tiger=""http://www.census.gov"" xmlns:topp=""http://www.openplans.org/topp"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" elementFormDefault=""qualified"" targetNamespace=""http://www.census.gov"">
K> <xsd:import namespace=""http://www.opengis.net/gml"" schemaLocation=""http://localhost:8090/geoserver/schemas/gml/3.1.1/base/gml.xsd""/>
K> <xsd:complexType name=""poly_landmarksType"">
K> <xsd:complexContent>
K> <xsd:extension base=""gml:AbstractFeatureType"">
K> <xsd:sequence>
K> <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""the_geom"" nillable=""true"" type=""gml:MultiSurfacePropertyType""/>
K> <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""LAND"" nillable=""true"" type=""xsd:double""/>
K> <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""CFCC"" nillable=""true"" type=""xsd:string""/>
K> <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""LANAME"" nillable=""true"" type=""xsd:string""/>
K> </xsd:sequence>
K> </xsd:extension>
K> </xsd:complexContent>
K> </xsd:complexType>
K> <xsd:element name=""poly_landmarks"" substitutionGroup=""gml:_Feature"" type=""tiger:poly_landmarksType""/>
K></xsd:schema>";
K>var xml = XDocument.Parse(text);
K>XNamespace ns = "http://www.w3.org/2001/XMLSchema";
K>var elems = xml.Descendants(ns + "element"); // коллекция всех узлов element
K>foreach (var elem in elems)
K>{
K> foreach (var attr in elem.Attributes()) // все атрибуты
K> Console.WriteLine(attr);
K> Console.WriteLine();
K>}
K>
В этом варианте 2 проблемы:
1) Вы получаете не только element, но и element, который является complexType.
вывод должен быть таким:
the_geom
LAND
CFCC
LANAME
у вас:
the_geom
LAND
CFCC
LANAME
poly_landmarks
2) Namespace неизвестен при разборе.
K>Или получаем конкретный элемент и конкретный атрибут.
K>K>var poly_landmarks = xml.Root.Element(ns + "complexType");
K>foreach (var elem in poly_landmarks.Descendants(ns + "element"))
K>{
K> Console.WriteLine(elem.Attribute("name").Value);
K>}
K>
При таком подходе мы пропускаем возможные element в корне (не относится к приведенному примеру, там в корне только complexType).
Ну и опять же мы не знаем Namespace.