چگونگی تبدیل DICOM به XML و Back با استفاده از DicomXml

چگونگی تبدیل 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
پیوستن به PACSXML
HL7 میانگینXML
جاوا اسکریپت FrontendsJSON
تغییرات XSLTXML
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 است.

 فارسی