Tôi có thể tạo lớp C # từ tệp XML không?
Tôi có thể tạo lớp C # từ tệp XML không?
Câu trả lời:
Có, bằng cách sử dụng xsd.exe
D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.
D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.
Ghi chú
Trả lời cách thay đổi thư mục trong Dấu nhắc nhà phát triển thành d: \ temp có thể hữu ích.
Nếu bạn tạo các lớp cho mảng đa chiều, có một lỗi trong trình tạo XSD.exe, nhưng có cách giải quyết .
xsd
chạy Dấu nhắc nhà phát triển cho VS2013 trong menu công cụ của bạn.
xsd.exe
có thể được tìm thấy dưới:C:\Program Files (x86)\Microsoft SDKs\Windows
xsd.exe
đã được tìm thấy tại: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Nếu bạn đang làm việc với dự án .NET 4.5 trong VS 2012 (hoặc mới hơn), bạn chỉ có thể Dán đặc biệt tệp XML của mình dưới dạng các lớp.
EDIT > Paste Special > Paste XML As Classes
xsd
, nhưng đầu ra là như nhau.
public (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n
=> public $1 $2 { get; set; }
và `private \ w + \ w + Field; \ r \ n \ r \
Lúc đầu tôi nghĩ Paste đặc biệt là chén thánh! Nhưng sau đó tôi đã thử nó và tóc tôi chuyển sang màu trắng giống như bộ phim Indiana Jones.
Nhưng bây giờ tôi sử dụng http://xmltocsharp.azurewebsites.net/ và bây giờ tôi vẫn trẻ như mọi khi.
Đây là một phân đoạn của những gì nó tạo ra:
namespace Xml2CSharp
{
[XmlRoot(ElementName="entry")]
public class Entry {
[XmlElement(ElementName="hybrisEntryID")]
public string HybrisEntryID { get; set; }
[XmlElement(ElementName="mapicsLineSequenceNumber")]
public string MapicsLineSequenceNumber { get; set; }
Tôi nhận ra rằng đây là một bài viết khá cũ và có lẽ bạn đã chuyển sang.
Nhưng tôi có cùng một vấn đề như bạn nên tôi quyết định viết chương trình của riêng mình.
Vấn đề với tuyến đường "xml -> xsd -> class" đối với tôi là nó chỉ tạo ra một khối mã hoàn toàn không thể nhận ra được và tôi đã kết thúc nó.
Nó không phải là cách thanh lịch nhưng nó đã làm công việc cho tôi.
Bạn có thể lấy nó ở đây: Hãy đưa ra gợi ý nếu bạn thích nó.
Bạn nên xem xét svcutil ( câu hỏi svcutil )
Cả xsd.exe và svcutil đều hoạt động trên tệp lược đồ XML (.xsd). XML của bạn phải tuân theo một tệp lược đồ được sử dụng bởi một trong hai công cụ này.
Lưu ý rằng các công cụ bên thứ 3 khác nhau cũng tồn tại cho việc này.
Bạn có thể sử dụng xsd theo đề xuất của Darin.
Ngoài ra, nên chỉnh sửa tệp test.xsd để tạo một lược đồ hợp lý hơn.
type="xs:string"
có thể được thay đổi thành type="xs:int"
giá trị số nguyên
minOccurs="0"
có thể được thay đổi thành minOccurs="1"
nơi yêu cầu trường
maxOccurs="unbounded"
có thể được thay đổi thành maxOccurs="1"
nơi chỉ cho phép một mục
Bạn có thể tạo xsd-s nâng cao hơn nếu bạn muốn xác thực dữ liệu của mình hơn nữa, nhưng điều này ít nhất sẽ cung cấp cho bạn các loại dữ liệu hợp lý trong c # được tạo.
Sử dụng cú pháp dưới đây để tạo lớp lược đồ từ tệp XSD.
C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Để chuyển đổi XML thành Lớp C #:
Lưu ý: trong thời gian đầy đủ, ứng dụng này có thể được thay thế, nhưng rất có thể, sẽ có một công cụ khác thực hiện điều tương tự.