.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>