ভিজুয়াল স্টুডিও 2010 ব্যবহার করে একটি এক্সএসডি ফাইল থেকে .NET 4.0 সি # শ্রেণি (সত্তা) উত্পন্ন করার বিকল্পগুলি কী কী?
ভিজুয়াল স্টুডিও 2010 ব্যবহার করে একটি এক্সএসডি ফাইল থেকে .NET 4.0 সি # শ্রেণি (সত্তা) উত্পন্ন করার বিকল্পগুলি কী কী?
উত্তর:
যথেষ্ট সহজ; শুধু চালান (বনাম কমান্ড প্রম্পটে)
xsd your.xsd /classes
(যা তৈরি করবে your.cs
)। তবে দ্রষ্টব্য, এখানে বেশিরভাগ অভ্যন্তরীণ বিকল্পগুলি 2.0 এর পরে খুব বেশি পরিবর্তন হয়নি
বিকল্পগুলির জন্য, ব্যবহার xsd /?
বা এমএসডিএন দেখুন ; উদাহরণস্বরূপ /enableDataBinding
দরকারী হতে পারে।
xsd schema1.xsd schema2.xsd schema3.xsd /c
xsd.exe হিসাবে মার্ক গ্রাভেল উল্লেখ করেছেন। আইএমও ওঠার জন্য দ্রুততম উপায়।
অথবা আপনার যদি আরও নমনীয়তা / বিকল্পগুলির প্রয়োজন হয়:
xsd2code ভিএস অ্যাড-ইন ( কোডপ্লেক্স )
আমি আপনাকে এখানে Vs2017 এবং Vs2019 ব্যবহারের সবচেয়ে সহজ উপায়টি দেখিয়েছি আপনার এক্সএসডি ভিজ্যুয়াল স্টুডিওতে খুলুন এবং প্রস্তাবিত ইউআরএল হিসাবে একটি নমুনা এক্সএমএল ফাইল উত্পন্ন করুন ।
2. "এক্সএমএল স্কিমা এক্সপ্লোরার" এর মধ্যে রুট / ডেটা নোড সন্ধান করতে সমস্ত দিক দিয়ে স্ক্রোল করুন। রুট / ডেটা নোডে ডান ক্লিক করুন এবং এটি "নমুনা এক্সএমএল উত্পন্ন করুন" প্রদর্শিত হবে। যদি এটি না দেখায় তবে এর অর্থ আপনি ডেটা উপাদান নোডে নেই তবে আপনি কোনও ডেটা সংজ্ঞা নোডে রয়েছেন।
xsd.exe যখন আপনার বিজ্ঞপ্তিযুক্ত রেফারেন্স থাকে তখন ভাল কাজ করে না (যেমন একটি টাইপ প্রত্যক্ষ বা পরোক্ষভাবে একটি নিজস্ব ধরণের একটি উপাদানটির মালিক হতে পারে)।
যখন বিজ্ঞপ্তি সংক্রান্ত তথ্যসূত্র উপস্থিত থাকে, আমি এক্সএসডি 2 কোড ব্যবহার করি। এক্সএসডি 2 কোড কোডটি বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলিকে ভালভাবে পরিচালনা করে এবং ভিএস আইডিইয়ের মধ্যে কাজ করে যা একটি বড় প্লাস। এটিতে সিরিয়ালাইজেশন / ডিসরিয়ালাইজেশন কোড তৈরির মতো ব্যবহার করতে পারেন এমন অনেকগুলি বৈশিষ্ট্যও রয়েছে। আপনি যদি সিরিয়ালাইজেশন তৈরি করছেন তবে জেনারেট এক্সএমএলটি ডিগ্রিবিউট চালু করেছেন তা নিশ্চিত করুন (অন্যথায় আপনি সমস্ত উপাদানগুলিতে সংজ্ঞায়িত না হলে অর্ডার দেওয়ার ক্ষেত্রে ব্যতিক্রম পাবেন)।
উভয়ই পছন্দ বৈশিষ্ট্যটির সাথে ভাল কাজ করে না। আপনি যে ধরণের পছন্দ করতে চান তার পরিবর্তে অবজেক্টের তালিকা / সংগ্রহগুলি শেষ করবেন। আমি যদি সম্ভব হয় তবে আপনার এক্সএসডি-তে পছন্দ এড়ানোর পরামর্শ দিচ্ছি কারণ এটি দৃ strongly়ভাবে টাইপ করা শ্রেণিতে ভালভাবে সিরিয়ালাইজ / ডিসরিয়ালাইজ না করে। যদিও আপনি যদি এই সম্পর্কে যত্ন না পান তবে এটি কোনও সমস্যা নয়।
Xsd2code- এর যে কোনও বৈশিষ্ট্যটি সিস্টেম.এক্সএমএল.এক্সএমএল উপাদান হিসাবে ডিসরিয়ালাইজ করে যা আমি সত্যিই সুবিধাজনক বলে মনে করি তবে আপনি যদি শক্ত টাইপযুক্ত বিষয়গুলি চান তবে এটি একটি সমস্যা হতে পারে। আমি প্রায়শই কাস্টম কনফিগার ডেটা মঞ্জুরি দেওয়ার সময় যে কোনওটি ব্যবহার করি, তাই কোনও এক্সএমএলমেট অন্য কোনও এক্সএমএল ডিসরিওলাইজারের কাছে যেতে সুবিধাজনক যা অন্যত্র কাস্টম সংজ্ঞায়িত।
একটি জন্য দ্রুত এবং অলস সমাধান , (এবং সব সময়ে বনাম ব্যবহার করছেন না) এই অনলাইন কনভার্টার ব্যবহার করে দেখুন:
এক্সএসডি => এক্সএমএল => সি # ক্লাস
এক্সএসডি উদাহরণ:
<?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 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%
মার্ক গ্র্যাভেলস উত্তরটি আমার পক্ষে সঠিক ছিল তবে আমার এক্সএসডি .xML বাড়ানো ছিল। আমি যখন এক্সএসডি প্রোগ্রামটি ব্যবহার করেছি তখন তা দিয়েছে:
- The table (Amt) cannot be the child table to itself in nested relations.
এই KB325695 অনুসারে আমি .xML থেকে .xsd এ এক্সটেনশনটির নামকরণ করেছি এবং এটি দুর্দান্ত কাজ করেছে।
আমি xsd.exe
উইন্ডোজ কমান্ড প্রম্পটে ব্যবহার করেছি ।
তবে, যেহেতু আমার এক্সএমএল বেশ কয়েকটি অনলাইন এক্সএমএলকে রেফারেন্স করেছে (আমার ক্ষেত্রে http://www.w3.org/1999/xlink.xsd
যা উল্লেখ করা হয়েছে http://www.w3.org/2001/xml.xsd
) আমাকে সেই স্কিম্যাটিক্সগুলিও ডাউনলোড করতে হয়েছিল, সেগুলি আমার এক্সএসডি-র মতো একই ডিরেক্টরিতে রেখেছিল এবং তারপরে সেই ফাইলগুলি কমান্ডটিতে তালিকাবদ্ধ করতে হবে:
"সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট এসডিকে \ উইন্ডোজ \ v8.1A \ বিন \ নেটফএক্স 4.5.1 সরঞ্জামসমূহ \ xsd.exe" / শ্রেণি / ভাষা: সিএস your.xsd xlink.xsd xml.xsd
xsd.exe
এটির সাথে একটি বিশাল জগাখিচুড়ি ছিল কারণ এটি বিজ্ঞপ্তিযুক্ত রেফারেন্স পছন্দ করে না তবে আমি শেষ পর্যন্ত সফল হয়েছি।
ডাব্লুএসডিএলের সাথে আমার এক্সএসডি ফাইলও ছিল। উপরেরটি আমার ক্ষেত্রে কাজ করে নি ত্রুটি দিয়েছে। এটি নিম্নলিখিত হিসাবে কাজ করেছে
wsdl /l:C# /out:D:\FileName.cs D:\NameApi\wsdl_1_1\RESAdapterService.wsdl
D:\CXTypes.xsd D:\CTypes.xsd
D:\Preferences.xsd