.NET 4.x Как использовать xsd файлы при десериализации xml для получения значений элементов? - C#
Формулировка задачи:
Всем привет. Для личных нужд по работе пишу программку для конвертирования xml, получаемых с сайта росреестра (Кадастровый план территории - далее КПТ), в чертеж dwg. На сайте росреестра нашел xml-схемы. Скачал - в архиве находятся три папки с файлами с расширением .xsd. Гуглив данный вопрос выяснил, что это описание структуры xml-файлов. Использовал утилиту xsd2code++ и получил класс для работы с КПТ. В классе заданы все нужные типы, согласно схемам xsd
Далее, использую десириализацию xml-файла и получаю экземпляр класса КПТ:
Все хорошо - все работает без ошибок и нареканий
Однако, начав копать глубже, выяснил следующее:
Вот пример куска xml-файла, получаемого с сайта росреестра:
После десериализации я получаю экземпляр класса КПТ, у которого значение параметра (к примеру) Name = Item05
В классе KPT у меня есть такое:
А файл xsd выглядит так:
Вопрос - как правильно мне сделать, чтобы при десириализации xml-файла в значении параметра Name я получал не enum, а сразу значение, описанное в xsd-файле? Если есть эти файлы, значит наверняка их можно использовать прям в самом коде моей программы и не изобретать велосипед?
З.Ы. Может просто xsd2code++ мне неверно создает класс?
// Десириализация документа в КПТ версии 10 private static KPTv10.KPT DeserializeXmlToKPTv10(string fileName) { var formatter = new XmlSerializer(typeof(KPTv10.KPT)); using (var fs = new FileStream(fileName, FileMode.Open)) { var kpt = formatter.Deserialize(fs) as KPTv10.KPT; return kpt; } }
<Parcel CadastralNumber="66:22:0502003:38" State="06" DateCreated="2010-03-17"> <Area> <Area>58040</Area> <Unit>055</Unit> <Inaccuracy>795</Inaccuracy> </Area> <Name>05</Name> <Location> <Address> <adrOut4:OKATO>65236000000</adrOut4:OKATO> <adrOut4:KLADR>6602100000000</adrOut4:KLADR> <adrOut4:Region>66</adrOut4:Region> <adrOut4:District Name="Режевской" Type="р-н" />
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1064.2")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn://x-artefacts-rosreestr-ru/commons/directories/parcels/1.0.1")] public enum dParcels { /// <remarks/> [System.Xml.Serialization.XmlEnumAttribute("01")] Item01, /// <remarks/> [System.Xml.Serialization.XmlEnumAttribute("02")] Item02, /// <remarks/> [System.Xml.Serialization.XmlEnumAttribute("03")] Item03, /// <remarks/> [System.Xml.Serialization.XmlEnumAttribute("04")] Item04, /// <remarks/> [System.Xml.Serialization.XmlEnumAttribute("05")] Item05, /// <remarks/> [System.Xml.Serialization.XmlEnumAttribute("06")] Item06, }
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dParc1="urn://x-artefacts-rosreestr-ru/commons/directories/parcels/1.0.1" targetNamespace="urn://x-artefacts-rosreestr-ru/commons/directories/parcels/1.0.1" elementFormDefault="qualified"> <xs:simpleType name="dParcels"> <xs:annotation> <xs:documentation>Вид земельного участка.</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="01"> <xs:annotation> <xs:documentation>Землепользование</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="02"> <xs:annotation> <xs:documentation>Единое землепользование </xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="03"> <xs:annotation> <xs:documentation>Обособленный участок </xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="04"> <xs:annotation> <xs:documentation>Условный участок </xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="05"> <xs:annotation> <xs:documentation>Многоконтурный участок</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="06"> <xs:annotation> <xs:documentation>Значение отсутствует</xs:documentation> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> </xs:schema>
Решение задачи: «.NET 4.x Как использовать xsd файлы при десериализации xml для получения значений элементов?»
textual
Листинг программы
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dAb1="urn://x-artefacts-rosreestr-ru/commons/directories/ass-building/1.0.1" targetNamespace="urn://x-artefacts-rosreestr-ru/commons/directories/ass-building/1.0.1" elementFormDefault="qualified"> <xs:simpleType name="dAssBuilding"> <xs:annotation> <xs:documentation>Назначение зданий</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="204001000000"> <xs:annotation> <xs:documentation>Нежилое здание</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="204002000000"> <xs:annotation> <xs:documentation>Жилой дом</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="204003000000"> <xs:annotation> <xs:documentation>Многоквартирный дом</xs:documentation> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> </xs:schema>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д