DicomXml'i kullanarak DICOM'u XML'e ve Back'a nasıl dönüştürürsünüz

DicomXml'i kullanarak DICOM'u XML'e ve Back'a nasıl dönüştürürsünüz

Bu öğretici, DICOM dosyalarını XML biçimine nasıl dönüştüreceğinizi ve XML’i C# kullanılarak DIKOM’a nasıl geri dönüştürdüğünü gösterir.

XML’i JSON üzerinden ne zaman kullanmalıyım

    • Yasal İlişkiler * :- Mevcut orta yazılım ve sistemler genellikle XML biçimini bekliyor.
  • **HL7 Uyumluluğu **- HL7 v2/v3 kullanan sağlık sistemleri genellikle XML ile çalışır.

    • XML Araçları * :- XSLT dönüşümleri ve XPath sorguları ile kurulan kuruluşlar.
    • Şemayı doğrulamak için *:- XML şemaları sıkı bir doğrulama kapasitesine sahiptir.

Etiket Arşivi: çevreyi hazırlamak

  • Visual Studio veya herhangi bir uyumlu .NET IDE ayarlayın.
  • Yeni bir .NET 8 konsol uygulama projesi oluşturun.
  • Aspose.Medical’ı NuGet Paket Yöneticisi’nden kurun.

DICOM’u XML’e dönüştürmek için adım adım rehber

Adım 1: Aspose.Medical yükleme

Projenize Aspose.Medical kütüphanesini NuGet kullanarak ekleyin.

Install-Package Aspose.Medical

2. Adım: İhtiyacınız olan alanları içerir

Kodunuzda gerekli isim alanlarına referanslar ekleyin.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

Adım 3: DICOM dosyasını yükleme

Dönüştürmek istediğiniz DICOM dosyasını yükleyin.

DicomFile dcm = DicomFile.Open("patient_scan.dcm");

Adım 4: XML’e serialize edin

Kullanmak için DicomXmlSerializer.Serialize XML’e dönüştürme yöntemi.

string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

Adım 5: XML çıkışını kaydedin

XML’i bir dosyaya kaydetmek veya iletmek için kaydedin.

File.WriteAllText("patient_scan.xml", xml);

Adım 6: XML’i Dataset’e Dönüştürmek

XML’i DICOM’a dönüştürmek için, Deserialize Yöntemleri.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Tam Kodu Örneği: DICOM to XML Conversion

İşte DICOM’u XML’e dönüştürmek için tam bir örnek:

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");

Tam Kodu Örneği: XML to DICOM Conversion

İşte XML’i DICOM’a dönüştürmek için tam bir örnek:

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.");
}

Etiket Arşivi: DICOM → XML → DIKOM

Verilerin bütünlüğünü gösteren tam yuvarlak dönüşüm:

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 çıkış yapısı

XML çıkışı, DICOM etiketlerini yapılandırılmış bir biçimde temsil eder:

<?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 vs XML çıkış karşılaştırması

Karşılaştırma boyutu

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

Kullanım İpuçları

ScenarioÖnerilen Format
Yeni Web HizmetleriJSON
Legacy PACS GeliştirmeXML için
HL7 orta boyXML için
JavaScript öncelikleriJSON
XSLT DönüşümleriXML için
NoSQL veritabanlarıJSON
Schema ValidasyonuXML için

Legacy Sistemleri ile Entegre

Örnekler miras ortağı ile entegrasyon:

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

Yasadışı XML İşlemleri

Deşarj işlemi için try-catch’a girin:

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}");
}

Karakter Kodlama Sorunları

XML dosyalarını okurken / yazarken doğru kodlama sağlar:

// 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();
}

Büyük Dosya İşlemleri

Çok büyük DICOM dosyaları için, streaming düşünün:

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);
}

Ek Bilgiler

  • XML biçimi, doğru indentasyonla daha iyi insan okunabilirliği sağlar.
  • XML, JSON’dan daha verboz ve daha büyük dosya boyutlarına yol açar.
  • Büyük XML dosyalarını depolamak veya iletmek için sıkıştırmayı düşünün.
  • Hem JSON hem de XML aynı DICOM veri türlerini ve yapılarını destekler.

Sonuç

Bu öğretici, DICOM dosyalarını XML biçimine nasıl dönüştüreceğinizi ve XML’i C#‘da DicOM’a nasıl geri dönüştürdüğünü göstermiştir.Aspose.Medical.XML serializasyonu, XML araçları ve çalışma akışlarına dayanan miraslı sağlık sistemleri ve ortamları ile entegre etmek için gereklidir.

 Türkçe