使用 MyDICOM 从 DICOM 中提取嵌入式 xml 文件

Extract an embedded xml file from a DICOM using MyDICOM

我正在接收带有嵌入式 xml 结果文件的 DICOM 图像。我可以使用 DVTk 找到 xml 应该位于的标签,但我无法弄清楚如何使用 MyDICOM 提取它。

我无法共享 DICOM,因为它包含专有信息,而且我没有获得许可。我希望有使用 MyDICOM 的经验的人可以提供帮助。

我怀疑我所拥有的发布代码是否会对任何人有所帮助,但我还是会这样做:

if (element.ValueRepresentation.ToString().ToLower().Equals("ob"))
{
    DeferredStream stream = element.Get(0) as DeferredStream;
    MyDicom.StreamReader reader = new MyDicom.StreamReader(stream, dicom.MetaData.Tsn);
    reader.UseDeferredStream = true;
    reader.EnforceEvenByteSizeElement = dicom.EnforceEvenByteSize;
    if (dicom.PrivateDictionary != null)
        reader.PrivateDictionary = dicom.PrivateDictionary;
    //object embedded = reader.Deserialize(this.dataSetStartTag, this.dataSetEndTag);
 }

我不确定这段代码是否真的有效,即使有效,我也没有开始和结束标记。我没有提供太多信息,所以我期望不高,但我很乐意在正确的方向上得到一点推动。

这不是正确的方法,但这是我在没有 MyDICOM 适当文档的情况下能够找到的唯一方法。我将流加载到一个字符串中,然后搜索我需要的信息。

//  Set up the stream
object elem = element.Get(0);
if (elem is DeferredStream)
     stream = elem as DeferredStream;
else if (elem is MemoryStream)
     stream = elem as MemoryStream;

//  Set up the stream reader
reader = new MyDicom.StreamReader(stream, dicom.MetaData.Tsn);
reader.UseDeferredStream = (elem is DeferredStream);
reader.EnforceEvenByteSizeElement = dicom.EnforceEvenByteSize;
if (dicom.PrivateDictionary != null)
     reader.PrivateDictionary = dicom.PrivateDictionary;

//  Read the Stream into a String
byte[] read = reader.ReadBytes(Convert.ToInt32(stream.Length));
String data = System.Text.Encoding.Default.GetString(read);
int start = data.IndexOf("<PatientData>");
int length = data.Substring(start).IndexOf("</PatientData>") + 15;

if (start > 0 && length > 0)
     result = data.Substring(start, length);
else
     result = "";

我担心这种方法的速度和准确性,所以如果有人知道正确的方法,仍然欢迎。否则,我会将其标记为完成。