DicomXml를 사용하여 DICOM을 XML 및 Back로 변환하는 방법

DicomXml를 사용하여 DICOM을 XML 및 Back로 변환하는 방법

이 튜토리얼은 DICOM 파일을 XML 형식으로 변환하는 방법을 보여주고 XML을 C#를 사용하여 XML으로 되돌릴 수 있습니다.XML 포맷은 유산 시스템, HL7 작업 흐름 및 XML 도구가 잘 설립 된 환경과 통합하기 위해 선호됩니다.

JSON에서 XML을 사용하는 방법

    • 합법적 인 통합* :- 기존 중간 소프트웨어 및 시스템은 종종 XML 형식을 기대합니다.
  • *HL7 호환성 :- HL7 v2/v3를 사용하는 건강 관리 시스템은 일반적으로 XML과 함께 작동합니다.

    • XML 도구에 대한 자세한 내용:- 설립 된 XSLT 변환 및 XPath 질문을 가진 조직.
    • 스케줄 검증* :- XML 스케줄은 엄격한 검증 능력을 제공합니다.

원제 : Environment Preparation

  • Visual Studio 또는 모든 호환되는 .NET IDE를 설정합니다.
  • 새로운 .NET 8 콘솔 애플리케이션 프로젝트를 만드십시오.
  • NuGet 패키지 관리자에서 Aspose.Medical을 설치합니다.

DICOM을 XML으로 변환하는 단계별 가이드

단계 1 : Aspose.Medical 설치

NuGet을 사용하여 프로젝트에 Aspose.Medical 도서관을 추가합니다.

Install-Package Aspose.Medical

단계 2 : 필요한 이름 공간을 포함

코드에 필요한 이름 공간에 참조를 추가합니다.

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

3단계 : DICOM 파일을 다운로드합니다.

변환하려는 DICOM 파일을 다운로드합니다.

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

단계 4 : XML으로 진단

사용하시기 바랍니다 DicomXmlSerializer.Serialize XML으로 변환하는 방법.

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

5단계: XML 출력 저장

XML을 저장하거나 전송할 수 있는 파일로 보관합니다.

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

단계 6 : XML 데이터 세트로 돌아가기

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 → DIKOM

데이터의 무결성을 보여주는 완전한 라운드 트립 변환:

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 vs XML 출력 비교

크기 비교

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에 대하여
JavaScript 프론트엔드JSON
XSLT 변형XML에 대하여
NoSQL 데이터베이스JSON
스케줄 검증XML에 대하여

유산 시스템에 대한 통합

유산 중간 소프트웨어와의 통합 예:

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

부적절한 XML 처리

실수를 처리하기 위해 try-catch에서 deserialization을 삽입하십시오 :

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 형식으로 변환하는 방법을 보여 주었으며, Aspose.Medical을 사용하여 C#로 XML을 다시 디코마로 탐색합니다.XML 시리화는 유산 건강 관리 시스템과 XML 도구 및 작업 흐름에 의존하는 환경과 통합하는 데 필수적입니다.

 한국어