@drzaus Saya memiliki pekerjaan ini di masa lalu, tapi sekarang ketika saya menambahkannya ia menghasilkan sebagai kelas DataSet bukan kelas yang saya harapkan. Saya hanya menambahkan item yang ada dan memilih file XSD.
msmucker0527
Jawaban:
490
cukup sederhana; jalankan saja (pada command prompt vs)
xsd your.xsd /classes
(yang akan membuat your.cs). Perhatikan, bagaimanapun, bahwa sebagian besar opsi intrinsik di sini tidak banyak berubah sejak 2.0
Untuk opsi, gunakan xsd /?atau lihat MSDN ; misalnya /enableDataBindingbisa bermanfaat.
"C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Alat \ xsd.exe" / kelas / bahasa: CS your.xsd
GeorgesC
2
Gravell untuk menyelamatkan lagi! Meskipun jawaban ini 100% benar, dalam kasus saya, saya merasa lebih mudah untuk menambahkan jalur direktori xsd.exe ke variabel lingkungan PATH. Komputer saya -> properti -> lanjutan -> variabel lingkungan -> Path - dan tambahkan "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Alat \" (tentu saja perhatikan baik untuk windows dan. NET versi khusus untuk mesin Anda) - selamat coding!
pimbrouwers
15
Untuk kasus Anda memiliki beberapa definisi skema yang saling terkait, cukup sebutkan semuanya. xsd schema1.xsd schema2.xsd schema3.xsd /c
mivra
56
xsd.exe seperti yang disebutkan oleh Marc Gravell. Cara tercepat untuk bangun dan menjalankan IMO.
Atau jika Anda membutuhkan lebih banyak fleksibilitas / opsi:
Saya tidak bisa mendapatkan kode xsd2 untuk saya. xsd.exe lebih kuat, tetapi berjuang dengan skema yang memiliki grup "melingkar".
Jeff
xsd2code bekerja di visual studio 2017 dan persis apa yang saya cari. Anda harus menjalankannya terlebih dahulu di direktori file program (x86), kemudian gunakan installer vsix. maka itu bekerja dengan baik. itu JAUH SUPERIOUR ke xsd.exe yang menghasilkan array [] [] bukan lists.i punya .xsd raksasa dan saya perlu membuat kelas untuk membuat serial XML ke. xsd.exe tidak akan menghasilkan kode serializable (.net core 2) dan xsd2code bekerja dengan baik
Saya tunjukkan di sini cara termudah menggunakan Vs2017 dan Vs2019 Buka xsd Anda dengan Visual Studio dan hasilkan file sampel xml seperti di url yang disarankan.
Setelah Anda membuka xsd Anda dalam tampilan desain seperti di bawah ini, klik pada xml schema explorer
2. Dalam "XML Schema Explorer" gulirkan semuanya ke bawah untuk menemukan simpul root / data. Klik kanan pada root / data node dan itu akan menampilkan "Hasilkan Sampel XML". Jika tidak ditampilkan, itu berarti Anda tidak berada di simpul elemen data tetapi Anda berada di salah satu simpul definisi data.
Salin Xml Anda yang dihasilkan ke clipboard
Buat kelas kosong baru di solusi Anda dan hapus definisi kelas. Hanya Namespace yang harus tetap
Sementara pointer mouse Anda fokus di dalam kelas Anda, pilih EDIT-> Tempel Spesial-> Tempel Xml sebagai Kelas
Sayangnya, ini tidak dijamin untuk menghasilkan semua kelas, tetapi ini adalah trik KEREN.
John Zabroski
1
@ JohnZabroski apakah Anda memiliki kasus yang tidak berhasil untuk Anda? Itu tergantung pada sampel xml, jika Anda dapat membuat sampel xml dengan semua kelas dan anggota, tidak ada alasan untuk melewatkan kelas dan anggota mana pun.
batmaci
Maksud saya adalah langkah 2 tidak dijamin untuk bekerja. Tapi itu adalah trik KEREN.
John Zabroski
Jawaban yang bagus Kamu pantas minum bir dingin !!
HenryGuillen17
14
xsd.exe tidak berfungsi dengan baik ketika Anda memiliki referensi melingkar (yaitu tipe dapat memiliki elemen tipe sendiri secara langsung atau tidak langsung).
Ketika referensi melingkar ada, saya menggunakan Xsd2Code. Xsd2Code menangani referensi melingkar dengan baik dan berfungsi dalam VS IDE, yang merupakan nilai tambah besar. Ini juga memiliki banyak fitur yang dapat Anda gunakan seperti menghasilkan kode serialisasi / deserialisasi. Pastikan Anda mengaktifkan GenerateXMLAttributes jika Anda membuat serialisasi (jika tidak, Anda akan mendapatkan pengecualian untuk pemesanan jika tidak didefinisikan pada semua elemen).
Tidak ada yang berfungsi dengan baik dengan fitur pilihan. Anda akan berakhir dengan daftar / koleksi objek, bukan tipe yang Anda inginkan. Saya akan merekomendasikan menghindari pilihan di xsd Anda jika mungkin karena ini tidak membuat serial / deserialize dengan baik ke kelas yang sangat diketik. Jika Anda tidak peduli dengan ini, maka itu tidak masalah.
Fitur apa pun dalam xsd2code deserializes sebagai System.Xml.XmlElement yang saya temukan sangat nyaman tetapi mungkin menjadi masalah jika Anda ingin objek yang diketik kuat. Saya sering menggunakan apa pun ketika mengizinkan data konfigurasi khusus, sehingga XmlElement mudah dilewatkan ke deserializer XML lain yang dibuat khusus di tempat lain.
Saya menambahkan xsd2code dengan melihat jawaban Anda. Apakah kita perlu mengubah apa pun untuk itu untuk mengurus referensi grup melingkar? Ini tidak berfungsi untuk saya dengan properti default
Jyotsna Sonawane
Saya tidak perlu melakukan sesuatu yang istimewa untuk itu bekerja dengan referensi melingkar. Jika Anda memposting xml sebagai pertanyaan baru dan menambahkan tautan di sini, saya senang melihatnya.
VoteCoffee
10
Untuk solusi cepat dan malas , (dan tidak menggunakan VS sama sekali) coba konverter online ini:
<?xml version="1.0" encoding="utf-8"?><!--Created with LiquidTechnologiesOnlineTools1.0(https://www.liquid-technologies.com) --><shiporder xsi:noNamespaceSchemaLocation="schema.xsd" orderid="string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><orderperson>string</orderperson><shipto><name>string</name><address>string</address><city>string</city><country>string</country></shipto><item><title>string</title><note>string</note><quantity>3229484693</quantity><price>-6894.465094196054907</price></item><item><title>string</title><note>string</note><quantity>2181272155</quantity><price>-2645.585094196054907</price></item><item><title>string</title><note>string</note><quantity>2485046602</quantity><price>4023.034905803945093</price></item><item><title>string</title><note>string</note><quantity>1342091380</quantity><price>-810.825094196054907</price></item></shiporder>
Yang mengkonversi ke struktur kelas ini:
/*
Licensed under the Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0
*/
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp{[XmlRoot(ElementName="shipto")]publicclassShipto{[XmlElement(ElementName="name")]publicstringName{get;set;}[XmlElement(ElementName="address")]publicstringAddress{get;set;}[XmlElement(ElementName="city")]publicstringCity{get;set;}[XmlElement(ElementName="country")]publicstringCountry{get;set;}}[XmlRoot(ElementName="item")]publicclassItem{[XmlElement(ElementName="title")]publicstringTitle{get;set;}[XmlElement(ElementName="note")]publicstringNote{get;set;}[XmlElement(ElementName="quantity")]publicstringQuantity{get;set;}[XmlElement(ElementName="price")]publicstringPrice{get;set;}}[XmlRoot(ElementName="shiporder")]publicclassShiporder{[XmlElement(ElementName="orderperson")]publicstringOrderperson{get;set;}[XmlElement(ElementName="shipto")]publicShiptoShipto{get;set;}[XmlElement(ElementName="item")]publicList<Item>Item{get;set;}[XmlAttribute(AttributeName="noNamespaceSchemaLocation",Namespace="http://www.w3.org/2001/XMLSchema-instance")]publicstringNoNamespaceSchemaLocation{get;set;}[XmlAttribute(AttributeName="orderid")]publicstringOrderid{get;set;}[XmlAttribute(AttributeName="xsi",Namespace="http://www.w3.org/2000/xmlns/")]publicstringXsi{get;set;}}}
Perhatian! Perhatikan bahwa ini hanya untuk Anda yang Memulai, hasilnya jelas perlu penyempurnaan!
Jawaban Marc Gravells tepat untuk saya tetapi xsd saya adalah dengan ekstensi .xml. Ketika saya menggunakan program xsd itu memberi: - The table (Amt) cannot be the child table to itself in nested relations.
Sesuai KB325695 ini saya mengubah nama ekstensi dari .xml ke .xsd dan berfungsi dengan baik.
Namun, karena xml saya mereferensikan beberapa xml online (dalam kasus saya http://www.w3.org/1999/xlink.xsdyang mana rujukan http://www.w3.org/2001/xml.xsd) saya juga harus mengunduh skema tersebut, meletakkannya di direktori yang sama dengan xsd saya, dan kemudian mendaftar file-file itu dalam perintah:
"C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Alat \ xsd.exe" / kelas / bahasa: CS your.xsd xlink.xsd xml.xsd
Itu tidak akan menjadi pasar Amazon XSD, tempat Anda membangun kelas untuk saat ini :-) Saya harus bekerja dengan mereka sekali, tidak akan pernah lagi menyentuh mereka atau melakukan pekerjaan apa pun di C # menggunakan file XSD yang menakjubkan, ada kekacauan seperti itu tidak nyata.
Shawty
@shawty Saya bekerja dengan standar GIS - WFS dan WMS - yang ditentukan oleh XSD besar, yang dirujuk silang. Sangat kacau xsd.exekarena tidak suka referensi melingkar, tetapi saya berhasil pada akhirnya.
Aske B.
ya, itu akan menjadi tebakan kedua saya. Melihat itu juga, tidak ada yang sedekat barang Amazon ... memberi saya mimpi buruk mengingat gemetar
shawty
0
Seiring dengan WSDL, saya punya file xsd. Di atas tidak berfungsi dalam kasus saya memberi kesalahan. Ini bekerja sebagai berikut
Jawaban:
cukup sederhana; jalankan saja (pada command prompt vs)
(yang akan membuat
your.cs
). Perhatikan, bagaimanapun, bahwa sebagian besar opsi intrinsik di sini tidak banyak berubah sejak 2.0Untuk opsi, gunakan
xsd /?
atau lihat MSDN ; misalnya/enableDataBinding
bisa bermanfaat.sumber
xsd schema1.xsd schema2.xsd schema3.xsd /c
xsd.exe seperti yang disebutkan oleh Marc Gravell. Cara tercepat untuk bangun dan menjalankan IMO.
Atau jika Anda membutuhkan lebih banyak fleksibilitas / opsi:
xsd2code VS add-in (Codeplex)
sumber
Saya tunjukkan di sini cara termudah menggunakan Vs2017 dan Vs2019 Buka xsd Anda dengan Visual Studio dan hasilkan file sampel xml seperti di url yang disarankan.
2. Dalam "XML Schema Explorer" gulirkan semuanya ke bawah untuk menemukan simpul root / data. Klik kanan pada root / data node dan itu akan menampilkan "Hasilkan Sampel XML". Jika tidak ditampilkan, itu berarti Anda tidak berada di simpul elemen data tetapi Anda berada di salah satu simpul definisi data.
sumber
xsd.exe tidak berfungsi dengan baik ketika Anda memiliki referensi melingkar (yaitu tipe dapat memiliki elemen tipe sendiri secara langsung atau tidak langsung).
Ketika referensi melingkar ada, saya menggunakan Xsd2Code. Xsd2Code menangani referensi melingkar dengan baik dan berfungsi dalam VS IDE, yang merupakan nilai tambah besar. Ini juga memiliki banyak fitur yang dapat Anda gunakan seperti menghasilkan kode serialisasi / deserialisasi. Pastikan Anda mengaktifkan GenerateXMLAttributes jika Anda membuat serialisasi (jika tidak, Anda akan mendapatkan pengecualian untuk pemesanan jika tidak didefinisikan pada semua elemen).
Tidak ada yang berfungsi dengan baik dengan fitur pilihan. Anda akan berakhir dengan daftar / koleksi objek, bukan tipe yang Anda inginkan. Saya akan merekomendasikan menghindari pilihan di xsd Anda jika mungkin karena ini tidak membuat serial / deserialize dengan baik ke kelas yang sangat diketik. Jika Anda tidak peduli dengan ini, maka itu tidak masalah.
Fitur apa pun dalam xsd2code deserializes sebagai System.Xml.XmlElement yang saya temukan sangat nyaman tetapi mungkin menjadi masalah jika Anda ingin objek yang diketik kuat. Saya sering menggunakan apa pun ketika mengizinkan data konfigurasi khusus, sehingga XmlElement mudah dilewatkan ke deserializer XML lain yang dibuat khusus di tempat lain.
sumber
Untuk solusi cepat dan malas , (dan tidak menggunakan VS sama sekali) coba konverter online ini:
Contoh XSD:
Konversi ke XML:
Yang mengkonversi ke struktur kelas ini:
Perhatian! Perhatikan bahwa ini hanya untuk Anda yang Memulai, hasilnya jelas perlu penyempurnaan!
sumber
Saya menggunakan
XSD
skrip batch untuk menghasilkan.xsd
file dan kelas dariXML
langsung:sumber
Perintah yang berhasil dalam kasus saya adalah:
sumber
Jawaban Marc Gravells tepat untuk saya tetapi xsd saya adalah dengan ekstensi .xml. Ketika saya menggunakan program xsd itu memberi:
- The table (Amt) cannot be the child table to itself in nested relations.
Sesuai KB325695 ini saya mengubah nama ekstensi dari .xml ke .xsd dan berfungsi dengan baik.
sumber
Saya menggunakan
xsd.exe
prompt perintah Windows.Namun, karena xml saya mereferensikan beberapa xml online (dalam kasus saya
http://www.w3.org/1999/xlink.xsd
yang mana rujukanhttp://www.w3.org/2001/xml.xsd
) saya juga harus mengunduh skema tersebut, meletakkannya di direktori yang sama dengan xsd saya, dan kemudian mendaftar file-file itu dalam perintah:sumber
xsd.exe
karena tidak suka referensi melingkar, tetapi saya berhasil pada akhirnya.Seiring dengan WSDL, saya punya file xsd. Di atas tidak berfungsi dalam kasus saya memberi kesalahan. Ini bekerja sebagai berikut
sumber