Re: Разбор XSD
От: koodeer  
Дата: 19.03.14 07:25
Оценка:
Здравствуйте, Аноним.

Загружаем xml в XDocument. Получаем коллекцию потомков. Выводим все атрибуты.

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"">
  <xsd:import namespace=""http://www.opengis.net/gml"" schemaLocation=""http://localhost:8090/geoserver/schemas/gml/3.1.1/base/gml.xsd""/>
  <xsd:complexType name=""poly_landmarksType"">
    <xsd:complexContent>
      <xsd:extension base=""gml:AbstractFeatureType"">
        <xsd:sequence>
          <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""the_geom"" nillable=""true"" type=""gml:MultiSurfacePropertyType""/>
          <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""LAND"" nillable=""true"" type=""xsd:double""/>
          <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""CFCC"" nillable=""true"" type=""xsd:string""/>
          <xsd:element maxOccurs=""1"" minOccurs=""0"" name=""LANAME"" nillable=""true"" type=""xsd:string""/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name=""poly_landmarks"" substitutionGroup=""gml:_Feature"" type=""tiger:poly_landmarksType""/>
</xsd:schema>";

var xml = XDocument.Parse(text);
XNamespace ns = "http://www.w3.org/2001/XMLSchema";

var elems = xml.Descendants(ns + "element"); // коллекция всех узлов element

foreach (var elem in elems)
{
    foreach (var attr in elem.Attributes()) // все атрибуты
        Console.WriteLine(attr);
    Console.WriteLine();
}


Или получаем конкретный элемент и конкретный атрибут.

var poly_landmarks = xml.Root.Element(ns + "complexType");

foreach (var elem in poly_landmarks.Descendants(ns + "element"))
{
    Console.WriteLine(elem.Attribute("name").Value);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.