Program xsd.exe – pomoc przy pracy
Program xsd.exe jest dostarczany wraz z pakietem visual studio i możemy go uruchomić poprzez konsolę developerską na przykład (Developer Command Prompt for VS 2017) dostępną z menu start. Program ten jest bardzo przydatny, kiedy musimy wygenerować klasy do serializacji, a dysponujemy schemą xml-a lub też kompletnym plikiem xml. Pozwala nam to zautomatyzować żmudne wpisywanie klas obiektów serializowanych ręcznie jak opisaliśmy w tym poście. W kolejnych akapitach postaram się powiedzieć jak wykorzystywać xsd.exe przy pracach związanych z serializacją xml-a.
Xml na schemę xsd
Pierwszym przypadkiem użycia będzie wykorzystanie możliwości stworzenia schemy xsd na podstawie pliku xml-owego. W najprostszej formie możemy wywołać program z katalogu, gdzie mamy nasz plik
xml-owy i jako parametr podać tylko nazwę pliku wejściowego.
Naszym plikiem wejściowym będzie ostatnio wygenerowany plik xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="utf-8"?> <Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Mateusz Stanek" Date="2018-02-09T18:56:42.0986108+01:00"> <DataObject> <Key>Path</Key> <Value>Some path</Value> </DataObject> <DataObject> <Key>Reference number</Key> <Value>1287394</Value> </DataObject> <DataObject> <Key>TestObject</Key> <Value>Object123</Value> </DataObject> <ElementsCount>3</ElementsCount> </Data> |
po wywołaniu polecenia
1 |
xsd SerializedObject.xml |
w tym samym katalogu otrzymamy schemę pliku SerializedObject.xsd
Xsd na klasę
Kolejnym krokiem jest wygenerowanie klas na podstawie schemy. To również jest zadaniem trywialnym. Tym razem oprócz parametru w postaci nazwy pliku xsd wykorzystujemy przełączniki /c lub /class oraz /language:languageName. Wspieranymi językami są :
- C#(CS) jest wartością domyślną w przypadku generacji klas C# przełącznik można pominąć
- Visual Basic (VB)
- JScript (JS)
- Visual J# (VJS)
1 |
xsd /c /language:CS SerializedObject.xsd |
Nie są to pełne możliwości programu xsd.exe lecz najczęściej wykorzystywane, osobiście nie miałem okazji wykorzystać innych a i generację schemy wykorzystałem tylko 1 raz. Co innego generacja klas, z której korzystałem wiele razy. Więcej można przeczytać w dokumentacji https://docs.microsoft.com/en-us/dotnet/standard/serialization/xml-schema-definition-tool-xsd-exe