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.Medical2. 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 JSONKullanım İpuçları
| Scenario | Önerilen Format |
|---|---|
| Yeni Web Hizmetleri | JSON |
| Legacy PACS Geliştirme | XML için |
| HL7 orta boy | XML için |
| JavaScript öncelikleri | JSON |
| XSLT Dönüşümleri | XML için |
| NoSQL veritabanları | JSON |
| Schema Validasyonu | XML 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.