У меня есть файл XML, который создается моим приложением. Проблема в том, что элементы в XML файле не совпадают с файлом XSD (требование для того, чтобы файл обрабатывался поставщиком).
Мой XSD-фрагмент файла:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Vehicle">
<xs:complexType>
<xs:sequence>
<xs:element name="Ford" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="SectionA" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="AX010_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX040_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX050_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX190_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="A080_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230F_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230G_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230GNOTE_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230H_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230HNOTE_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230J_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
мой XML-фрагмент файла:
<SectionA>
<AX010_1>121</AX010_1>
<AX050_1>334122</AX050_1>
<AX090_1>113</AX090_1>
<AX040_1>334477</AX040_1>
<AX230H_1>301</AX230H_1>
<AX230F_1>3651122</AX230F_1>
</SectionA>
Как я могу прочитать XML файл и перенастроить элементы, чтобы они были в той же последовательности, что и файл XSD?
Я просмотрел похожие сообщения на SO, но мне не удалось решить мою проблему (предпочитайте использовать LINQToXML).
Если вы сериализуете класс aС# и из него, установите свойство "Заказ" в XmlElementAttribute. xsd.exe будет генерировать эти атрибуты для вас с параметром /order
.
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public string AX010_1 { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Order=1)]
public string AX040_1 { get; set; }
Используя System.Xml.Serialization.XmlSerializer
мы позаботимся о заказе ваших узлов при его сериализации.