Dzień dobry.
Przy użyciu xsd.exe udało mi się utworzyć klasę na podstawie plików schematu. Klasę wypełniam danymi i generuję XML w następujący sposób :
public static string testtofile<T>(this T toSerialize)
{
XmlSchemaSet schema = new XmlSchemaSet();
schema.Add(@"http://www.mf.gov.pl/schematy/EDD/TraderToEDD/2021/11/", @"SchematyXML\traderToEdd.xsd");
XmlSerializer ser = new XmlSerializer(toSerialize.GetType(), @"http://www.mf.gov.pl/schematy/EDD/TraderToEDD/2021/11/");
XmlDocument xd = new XmlDocument();
using (MemoryStream memStm = new MemoryStream())
{
ser.Serialize(memStm, toSerialize);
memStm.Position = 0;
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.Schemas = schema;
using (var xtr = XmlReader.Create(memStm, settings))
{
xd.Schemas = schema;
xd.Load(xtr);
xd.Save(@"D:\lala.xml");
return xd.OuterXml;
}
}
}
Plik niby wychodzi jednak nie jest on formatowany zgonie ze schematem dla przykładu :
<q4:Quantity>2000.0000</q4:Quantity>
Natomiast schemat mówi :
<xs:simpleType name="QuantityType">
<xs:annotation>
<xs:documentation>
<doc:description value="Quantity" />
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="15" />
<xs:fractionDigits value="3" />
<xs:minExclusive value="0" />
<xs:pattern value="[1-9]\d{0,14}" />
<xs:pattern value="([1-9]\d{0,13}|0)\.[0-9]" />
<xs:pattern value="([1-9]\d{0,12}|0)\.\d[0-9]" />
<xs:pattern value="([1-9]\d{0,11}|0)\.\d\d[0-9]" />
</xs:restriction>
</xs:simpleType>
Nie bardzo mam już pomysł jak to naprawić więc jeśli ktoś jest w stanie zasugerować cokolwiek to będę wdzięczny za każdą pomoc.
Jeśli ktoś chciał by się podjąć poprawy tego bałaganu komercyjnie to również jestem otwarty na propozycję współpracy.