在XML和Json之间转换fhir

问题描述

有没有办法通过独立于所使用的FHIR版本的方式将fhir包从json转换为xml?

我认为firenet的.net fhir api可以做到,但是任何给定版本的api似乎都是特定于FHIR发行版的。

解决方法

问题是FHIR捆绑包(或任何资源)隐式始终具有版本。理由是每个FHIR版本都具有(或可以具有)不同的基础数据模型。 但是,可以使用.NET FHIR API(特别是软件包https://www.nuget.org/packages/Hl7.Fhir.Serialization)进行转换,并且版本差异最小。 以下代码使用与版本无关的ISourceNodehttp://docs.simplifier.net/fhirnetapi/parsing/isourcenode.html

进行转换
using Hl7.Fhir.ElementModel;
using Hl7.Fhir.Serialization;    

var xml = "<Patient xmlns=\"http://hl7.org/fhir\"><identifier><use value=\"official\" /></identifier></Patient>";
var patientNode = FhirXmlNode.Parse(xml);
var typedElement = patientNode.ToTypedElement();
var json = typedElement.ToJson();

不过,上面的代码有一个问题,因为VS会告诉您。使用不带参数的ToTypedElement()是危险的,因为忽略版本是危险的。不过,它在很多情况下都可以使用,如果对您来说足够好,那可能就是要走的路。

一个更安全的解决方案是使用相同的代码,但另外使用所谓的IStructureDefinitionSummaryProvider(为歉意表示歉意)为API提供特定的版本信息。可以在特定于版本的API库中找到此接口的实现,例如https://www.nuget.org/packages/Hl7.Fhir.R4

using Hl7.Fhir.ElementModel;
using Hl7.Fhir.Serialization;
using Hl7.Fhir.Specification;

var xml = "<Patient xmlns=\"http://hl7.org/fhir\"><identifier><use value=\"official\" /></identifier></Patient>";
var patientNode = FhirXmlNode.Parse(xml);
var summaryProvider = new PocoStructureDefinitionSummaryProvider();
var typedElement = patientNode.ToTypedElement(summaryProvider);
var json = typedElement.ToJson();

您可能可以根据要读取的输入的某些属性来注入这些PocoStructureDefinitionSummaryProviders。例如,这就是我们在Vonk FHIR server中所做的事情。

,

FHIR Java验证程序可以对任何版本执行此操作。根据您需要使用它的情况可能合适

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...