【问题标题】:DCM4CHE retrieve value based on tag in a sequenceDCM4CHE 根据序列中的标签检索值
【发布时间】:2017-01-18 21:59:34
【问题描述】:

使用 DCM4CHE 根据纯 xml 中的标签名称检索值非常简单。

例如,如果我想检索属性 AccessionNumber 的值:

String accessiongNumber = attribute.getString(Tag.AccessionNumber);

但是处理序列时最好的方法是什么?我想使用它的标签名称检索一个值,但该值在序列内部有 5 层。

在这种情况下,我可以得到我想要的序列:

Sequence recordSequence = attribute.getSequence(Tag.RecordSequence);

一旦我有了嵌入值的序列,有没有办法通过它的标签直接检索一个值?

【问题讨论】:

  • recordSequence.get(#).getString(Tag.Something)

标签: java xml dcm4che


【解决方案1】:

尝试使用 Attributes.getNestedDataset 方法。这些将为您提供序列中的属性。比如:

Attributes refStudy = attribute.getNestedDataset(Tag.ReferencedStudySeequence, 0);
String refSopiuid = refStudy.getString(Tag.ReferencedSOPInstanceUID);

【讨论】:

  • 感谢您的回答。但就我而言,在第一个 getNestedDataset 之后,其中还有其他嵌套数据集。我正在寻找带有标签“NumericValue”的值,但存在多个实例。判断哪个“NumericValue”是正确的唯一方法是查看上面带有标签“CodeMeaning”的节点的值。有没有办法在你的答案中添加一个 if 语句来检查“NumericValue”上方的节点是否有标签“CodeMeaning”并包含我指定的特定值?
  • 当然,您可以编写任何必要的代码。 getNestedDataset(sequence, i) 获取序列中的第 i 个项目;您可以获得任何项目(或迭代它们)。同样,“项目”本身是可能包含更多序列或不仅仅是单个标签的属性。
  • 那么更进一步,如果我想找到一个特定的节点,我是否需要在深度优先搜索中遍历整个嵌套数据集?我的数据有很多层,有没有一种方法可以获取关键字的所有实例,无论实例位于哪个层?谢谢。
  • 如果你只想搜索整个属性,你应该使用访问者模式并实现 Attributes.Visitor 接口。实现访问方法来执行您需要的任务。然后 Attributes.accept(Visitor, true) 方法将“访问”树中的每个属性。我会注意到这可能比直接获取序列和项目效率低,但如果你只是在寻找一个属性“无论它在哪里”,那么肯定会使用访问者。
  • 有道理。猜猜访客模式是要走的路。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 2020-03-05
  • 1970-01-01
  • 2015-09-03
  • 2010-09-16
  • 2021-12-31
相关资源
最近更新 更多