چگونگی تبدیل DICOM به XML و Back با استفاده از DicomXml
این آموزش نشان می دهد که چگونه فایل های DICOM را به فرمت XML تبدیل کنید و XML را با استفاده از C# به DIKOM بازگردانید.فرمت XML برای ادغام با سیستم های میراث، جریان های کار HL7 و محیط هایی که در آن ابزار XML به خوبی تنظیم شده است، ترجیح داده می شود.
نحوه استفاده از XML در JSON
*آموزش قانونگذاری *:- نرم افزار های متوسط و سیستم های موجود اغلب انتظار فرمت XML را دارند.
H7 سازگاری :- سیستم های مراقبت های بهداشتی با استفاده از HL7 v2/v3 معمولا با XML کار می کنند.
- ابزارهای XML :- سازمان هایی که XSLT و XPath را تغییر داده اند.
تصمیم گیری برنامه ها :- طرح های XML قابلیت های تایید دقیق را فراهم می کنند.
برچسب ها: آماده سازی محیط زیست
- Visual Studio یا هر IDE .NET سازگار را نصب کنید.
- ایجاد یک برنامه جدید .NET 8 کنسول.
- نصب Aspose.Medical از NuGet Package Manager.
راهنمای گام به گام برای تبدیل DICOM به XML
مرحله اول: نصب Aspose.Medical
کتابخانه Aspose.Medical را به پروژه خود با استفاده از NuGet اضافه کنید.
Install-Package Aspose.Medicalمرحله دوم: فضای نام مورد نیاز را شامل کنید
ارجاعات را به فضاهای نام مورد نیاز در کد خود اضافه کنید.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;مرحله 3: فایل DICOM را بارگذاری کنید
فایل DICOM را که می خواهید تبدیل کنید بارگذاری کنید.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");مرحله چهارم: XML را جدی بگیرید
استفاده از DicomXmlSerializer.Serialize روش تبدیل به XML
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);مرحله 5: ذخیره خروجی XML
XML را به یک فایل برای ذخیره سازی یا انتقال حفظ کنید.
File.WriteAllText("patient_scan.xml", xml);مرحله 6: Deserialize XML Back to Dataset
برای تبدیل XML به DICOM، از Deserialize روش است.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);کد کامل نمونه: DICOM به XML تبدیل
در اینجا یک مثال کامل برای تبدیل DICOM به XML است:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
// Convert to XML
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
// Save to file
File.WriteAllText("patient_scan.xml", xml);
Console.WriteLine("DICOM converted to XML successfully!");
Console.WriteLine($"Output saved to: patient_scan.xml");کد کامل نمونه: XML به DICOM تبدیل
در اینجا یک مثال کامل برای تبدیل XML به DICOM است:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Read XML from file
string xml = File.ReadAllText("patient_scan.xml");
// Deserialize to Dataset
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);
if (dataset != null)
{
// Create DicomFile from Dataset
DicomFile dcm = new DicomFile(dataset);
// Save as DICOM file
dcm.Save("reconstructed.dcm");
Console.WriteLine("XML converted back to DICOM successfully!");
}
else
{
Console.WriteLine("Failed to deserialize XML.");
}برچسب های ارشیو: DICOM → XML
کامل چرخ دایره تبدیل نشان دهنده یکپارچگی داده ها:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Load original DICOM file
DicomFile original = DicomFile.Open("original_scan.dcm");
Console.WriteLine("Original DICOM loaded.");
// Convert to XML
string xml = DicomXmlSerializer.Serialize(original.Dataset);
Console.WriteLine($"Converted to XML ({xml.Length} characters).");
// Save XML (for transmission or storage)
File.WriteAllText("intermediate.xml", xml);
// Later: Deserialize XML back to Dataset
string loadedXml = File.ReadAllText("intermediate.xml");
Dataset? reconstructedDataset = DicomXmlSerializer.Deserialize(loadedXml);
if (reconstructedDataset != null)
{
// Create new DicomFile
DicomFile reconstructed = new DicomFile(reconstructedDataset);
reconstructed.Save("reconstructed_scan.dcm");
Console.WriteLine("Round-trip complete: DICOM → XML → DICOM");
}ساختار خروجی XML
خروجی XML نشان دهنده برچسب های DICOM در یک فرمت ساختاری است:
<?xml version="1.0" encoding="utf-8"?>
<NativeDicomModel>
<DicomAttribute tag="00080005" vr="CS" keyword="SpecificCharacterSet">
<Value number="1">ISO_IR 100</Value>
</DicomAttribute>
<DicomAttribute tag="00080020" vr="DA" keyword="StudyDate">
<Value number="1">20240115</Value>
</DicomAttribute>
<DicomAttribute tag="00100010" vr="PN" keyword="PatientName">
<PersonName number="1">
<Alphabetic>
<FamilyName>DOE</FamilyName>
<GivenName>JOHN</GivenName>
</Alphabetic>
</PersonName>
</DicomAttribute>
<DicomAttribute tag="00100020" vr="LO" keyword="PatientID">
<Value number="1">12345</Value>
</DicomAttribute>
</NativeDicomModel>مقایسه JSON با XML Output
مقایسه اندازه
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("sample.dcm");
string json = DicomJsonSerializer.Serialize(dcm);
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
Console.WriteLine($"JSON size: {json.Length:N0} characters");
Console.WriteLine($"XML size: {xml.Length:N0} characters");
// XML is typically 20-40% larger than JSONتوصیه های مورد استفاده
| Scenario | فرم توصیه شده |
|---|---|
| خدمات جدید وب سایت | JSON |
| پیوستن به PACS | XML |
| HL7 میانگین | XML |
| جاوا اسکریپت Frontends | JSON |
| تغییرات XSLT | XML |
| NoSQL پایگاه داده ها | JSON |
| برنامه اعتباربخشی | XML |
ارتباط با سیستم های ارثی
مثال ادغام با میراث middleware:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Net.Http;
using System.Text;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
// Send to legacy SOAP service
using HttpClient client = new();
var content = new StringContent(xml, Encoding.UTF8, "application/xml");
HttpResponseMessage response = await client.PostAsync(
"http://legacy-pacs/dicom/import",
content
);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("XML successfully sent to legacy system!");
}Troubleshooting
آشنایی با Invalid XML
Wrap deserialization in try-catch for error handling :
try
{
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);
if (dataset == null)
{
Console.WriteLine("Deserialization returned null.");
}
}
catch (System.Xml.XmlException ex)
{
Console.WriteLine($"XML parsing error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Deserialization error: {ex.Message}");
}موضوعات شخصیت کدگذاری
اطمینان حاصل کنید که هنگام خواندن و نوشتن فایل های XML، کدگذاری مناسب انجام می شود:
// Write with explicit encoding
using (StreamWriter writer = new StreamWriter("output.xml", false, Encoding.UTF8))
{
writer.Write(xml);
}
// Read with explicit encoding
using (StreamReader reader = new StreamReader("input.xml", Encoding.UTF8))
{
string xml = reader.ReadToEnd();
}مدیریت فایل های بزرگ
برای فایل های بسیار بزرگ DICOM، در نظر گرفتن پخش:
using (FileStream fs = File.Create("large_output.xml"))
using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8))
{
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
writer.Write(xml);
}اطلاعات اضافی
- فرمت XML امکان خواندن بهتر را برای انسان فراهم می کند.
- XML کلامی تر از JSON است و در نتیجه حجم فایل های بزرگتر می شود.
- در نظر گرفتن فشرده سازی برای ذخیره یا انتقال فایل های XML بزرگ.
- هر دو JSON و XML از همان انواع داده ها و ساختارهای DICOM پشتیبانی می کنند.
نتیجه گیری
این راهنمای نشان داده است که چگونه برای تبدیل فایل های DICOM به فرمت XML و تخلیه XML به C# با استفاده از Aspose.Medical.XML serialization ضروری برای ادغام با ارثی سیستم های مراقبت های بهداشتی و محیط های مبتنی بر ابزار و جریان های کار XML است.