Visual Studio 2010 का उपयोग करके एक xsd फ़ाइल से .NET 4.0 c # कक्षाएं (निकाय) बनाने के लिए क्या विकल्प हैं?
Visual Studio 2010 का उपयोग करके एक xsd फ़ाइल से .NET 4.0 c # कक्षाएं (निकाय) बनाने के लिए क्या विकल्प हैं?
जवाबों:
काफी सरल; बस चलाएं (बनाम कमांड प्रॉम्प्ट पर)
xsd your.xsd /classes
(जो पैदा करेगा your.cs
)। हालाँकि, ध्यान दें कि यहाँ अधिकांश आंतरिक विकल्प 2.0 से बहुत अधिक नहीं बदले हैं
विकल्पों के लिए, MSDN का उपयोग करें xsd /?
या देखें ; उदाहरण के लिए /enableDataBinding
उपयोगी हो सकता है।
xsd schema1.xsd schema2.xsd schema3.xsd /c
मार्क Gravell द्वारा वर्णित के रूप में xsd.exe। IMO को चलाने और चलाने का सबसे तेज़ तरीका।
या यदि आपको अधिक लचीलेपन / विकल्पों की आवश्यकता है:
xsd2code VS ऐड-इन (कोडप्लेक्स)
मैं आपको यहाँ Vs2017 और Vs2019 का उपयोग करने का सबसे आसान तरीका दिखाता हूँ, अपने xsd को विज़ुअल स्टूडियो के साथ खोलें और सुझाए गए url के अनुसार एक नमूना xml फ़ाइल बनाएँ ।
2. "XML स्कीमा एक्सप्लोरर" के भीतर रूट / डेटा नोड को खोजने के लिए सभी तरह से नीचे स्क्रॉल करें। रूट / डेटा नोड पर राइट क्लिक करें और यह "जेनरेट सैंपल एक्सएमएल" दिखाएगा। यदि यह नहीं दिखाता है, तो इसका मतलब है कि आप डेटा तत्व नोड पर नहीं हैं, लेकिन आप डेटा परिभाषा नोड में से किसी पर हैं।
xsd.exe तब अच्छी तरह से काम नहीं करता है जब आपके पास परिपत्र संदर्भ होते हैं (यानी एक प्रकार सीधे या परोक्ष रूप से अपने स्वयं के एक तत्व का मालिक हो सकता है)।
जब परिपत्र संदर्भ मौजूद होते हैं, तो मैं Xsd2Code का उपयोग करता हूं। Xsd2Code परिपत्र संदर्भों को अच्छी तरह से संभालता है और वीएस आईडीई के भीतर काम करता है, जो एक बड़ा प्लस है। इसमें बहुत सारी विशेषताएं हैं जिनका उपयोग आप क्रमांकन / डीरिएलाइज़ेशन कोड उत्पन्न करने की तरह कर सकते हैं। सुनिश्चित करें कि आप GenerateXMLAttributes को चालू करते हैं यदि आप क्रमांकन उत्पन्न कर रहे हैं (अन्यथा आप सभी तत्वों पर परिभाषित नहीं होने पर ऑर्डर करने के लिए अपवाद प्राप्त करेंगे)।
न तो पसंद सुविधा के साथ काम करता है। आपके द्वारा इच्छित प्रकार के बजाय ऑब्जेक्ट की सूची / संग्रह के साथ समाप्त हो जाएगा। मैं आपके xsd में पसंद से बचने की सलाह दूंगा यदि संभव हो तो यह क्रमबद्ध रूप से अच्छी तरह से टाइप किए गए वर्ग में अच्छी तरह से अनुक्रमित / डिस्क्राइलाइज नहीं करता है। यदि आप इस बारे में परवाह नहीं करते हैं, तो यह एक समस्या नहीं है।
Xsd2code में कोई भी सुविधा System.Xml.XmlElement के रूप में डिसेरिअलाइज़ करती है, जो मुझे वास्तव में सुविधाजनक लगता है, लेकिन यदि आप मजबूत टाइप की गई वस्तुएं चाहते हैं तो यह एक समस्या हो सकती है। कस्टम कॉन्फ़िगरेशन डेटा की अनुमति देते समय मैं अक्सर किसी भी का उपयोग करता हूं, इसलिए एक एक्सएमएल क्लेमेंट किसी अन्य एक्सएमएल डिसेरलाइज़र को पारित करने के लिए सुविधाजनक है जो कहीं और कस्टम परिभाषित है।
एक त्वरित और आलसी समाधान के लिए , (और वीएस का उपयोग बिल्कुल नहीं) इन ऑनलाइन कन्वर्टर्स का प्रयास करें:
XSD => XML => C # कक्षाएं
उदाहरण XSD:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
XML में धर्मान्तरित:
<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Technologies Online Tools 1.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>
जो इस वर्ग संरचना में परिवर्तित होता है:
/*
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")]
public class Shipto {
[XmlElement(ElementName="name")]
public string Name { get; set; }
[XmlElement(ElementName="address")]
public string Address { get; set; }
[XmlElement(ElementName="city")]
public string City { get; set; }
[XmlElement(ElementName="country")]
public string Country { get; set; }
}
[XmlRoot(ElementName="item")]
public class Item {
[XmlElement(ElementName="title")]
public string Title { get; set; }
[XmlElement(ElementName="note")]
public string Note { get; set; }
[XmlElement(ElementName="quantity")]
public string Quantity { get; set; }
[XmlElement(ElementName="price")]
public string Price { get; set; }
}
[XmlRoot(ElementName="shiporder")]
public class Shiporder {
[XmlElement(ElementName="orderperson")]
public string Orderperson { get; set; }
[XmlElement(ElementName="shipto")]
public Shipto Shipto { get; set; }
[XmlElement(ElementName="item")]
public List<Item> Item { get; set; }
[XmlAttribute(AttributeName="noNamespaceSchemaLocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")]
public string NoNamespaceSchemaLocation { get; set; }
[XmlAttribute(AttributeName="orderid")]
public string Orderid { get; set; }
[XmlAttribute(AttributeName="xsi", Namespace="http://www.w3.org/2000/xmlns/")]
public string Xsi { get; set; }
}
}
ध्यान! ध्यान रखें कि यह सिर्फ गेट-यू-स्टार्ट के लिए है, परिणाम स्पष्ट रूप से परिशोधन की आवश्यकता है!
मैं सीधे और से फाइल और कक्षाएं XSD
उत्पन्न करने के लिए एक बैच स्क्रिप्ट का उपयोग करता हूं : .xsd
XML
set XmlFilename=Your__Xml__Here
set WorkingFolder=Your__Xml__Path_Here
set XmlExtension=.xml
set XsdExtension=.xsd
set XSD="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1\Tools\xsd.exe"
set XmlFilePath=%WorkingFolder%%XmlFilename%%XmlExtension%
set XsdFilePath=%WorkingFolder%%XmlFilename%%XsdExtension%
%XSD% %XmlFilePath% /out:%WorkingFolder%
%XSD% %XsdFilePath% /c /out:%WorkingFolder%
मार्क ग्रेवेल्स का उत्तर मेरे लिए सही था लेकिन मेरा xsd .xml के विस्तार के साथ था। जब मैंने xsd प्रोग्राम का उपयोग किया तो यह दिया:
- The table (Amt) cannot be the child table to itself in nested relations.
इस KB325695 के अनुसार मैंने .xml से .xsd तक एक्सटेंशन का नाम बदल दिया और यह ठीक काम कर गया।
मैंने xsd.exe
विंडोज कमांड प्रॉम्प्ट में इस्तेमाल किया ।
हालाँकि, जब से मेरे xml ने कई ऑनलाइन xml का संदर्भ लिया (मेरे मामले में http://www.w3.org/1999/xlink.xsd
जो संदर्भ देता है http://www.w3.org/2001/xml.xsd
) मुझे भी उन स्कीमैटिक को डाउनलोड करना था, उन्हें मेरी xsd जैसी ही डायरेक्टरी में डाल दिया, और फिर उन फाइलों को कमांड में सूचीबद्ध किया:
"C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 उपकरण \ xsd.exe" / कक्षाएं / भाषा: CS your.xsd xlink.xsd xml.xsd
xsd.exe
क्योंकि यह परिपत्र संदर्भ पसंद नहीं करता है, लेकिन मैं अंत में सफल रहा।
WSDL के साथ, मेरे पास xsd फाइलें थीं। ऊपर वाले ने मेरे मामले में काम नहीं किया। इसने इस प्रकार काम किया
wsdl /l:C# /out:D:\FileName.cs D:\NameApi\wsdl_1_1\RESAdapterService.wsdl
D:\CXTypes.xsd D:\CTypes.xsd
D:\Preferences.xsd