问题描述
我是 FHIR 的新手,需要帮助来解析 C# 中的 FHIR-Bundle (xml)。我能够从包中的组合资源中获取患者或组织资源的 URL,但需要将资源的值(例如患者姓名)存储到变量中以使用它们,例如将它们存储到 sql 数据库中。你能帮我吗?提前谢谢!
<Bundle xmlns="http://hl7.org/fhir">
<id value="0428d416-149e-48a4-977c-394887b3d85c" />
<Meta>
<lastUpdated value="2021-04-06T08:30:00Z" />
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_ERP_Bundle|1.0.1" />
</Meta>
<identifier>
<system value="https://gematik.de/fhir/NamingSystem/PrescriptionID" />
<value value="160.100.000.000.002.36" />
</identifier>
<type value="document" />
<timestamp value="2021-04-06T08:30:00Z" />
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Composition/a054c2f3-0123-4d33-a0b3-bedec2f7d1ea" />
<resource>
<Composition>
<id value="a054c2f3-0123-4d33-a0b3-bedec2f7d1ea" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_ERP_Composition|1.0.1" />
</Meta>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_FOR_Legal_basis">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_STATUSKENNZEICHEN" />
<code value="00" />
</valueCoding>
</extension>
<status value="final" />
<type>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_FORMULAR_ART" />
<code value="e16A" />
</coding>
</type>
<subject>
<reference value="Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
</subject>
<date value="2021-04-05T08:00:00Z" />
<author>
<reference value="Practitioner/e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
<type value="Practitioner" />
</author>
<author>
<type value="Device" />
<identifier>
<system value="https://fhir.kbv.de/NamingSystem/KBV_NS_FOR_Pruefnummer" />
<value value="Y/410/2107/36/999" />
</identifier>
</author>
<title value="elektronische Arzneimittelverordnung" />
<custodian>
<reference value="Organization/d2b30a70-9830-4968-ab97-688472b6f9a3" />
</custodian>
<section>
<code>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Section_Type" />
<code value="Prescription" />
</coding>
</code>
<entry>
<!-- Referenz auf Verordnung (MedicationRequest) -->
<reference value="MedicationRequest/06dc1594-509a-4f4c-ada7-dfd477a02d86" />
</entry>
</section>
<section>
<code>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Section_Type" />
<code value="Coverage" />
</coding>
</code>
<entry>
<!-- Referenz auf Krankenkasse/Kostenträger -->
<reference value="Coverage/df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
</entry>
</section>
</Composition>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/MedicationRequest/06dc1594-509a-4f4c-ada7-dfd477a02d86" />
<resource>
<MedicationRequest>
<!-- Beispiel MedicationRequest für eine PZN-Verordnung -->
<id value="06dc1594-509a-4f4c-ada7-dfd477a02d86" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_ERP_Prescription|1.0.1" />
</Meta>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_Statuscopayment">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Statuscopayment" />
<code value="1" />
</valueCoding>
</extension>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_EmergencyServicesFee">
<valueBoolean value="false" />
</extension>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_BVG">
<valueBoolean value="false" />
</extension>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_Multiple_Prescription">
<extension url="Kennzeichen">
<valueBoolean value="false" />
</extension>
</extension>
<status value="active" />
<intent value="order" />
<medicationReference>
<reference value="Medication/f568397d-7ba2-46ac-904b-02caec933b42" />
</medicationReference>
<subject>
<reference value="Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
</subject>
<authoredOn value="2020-04-06" />
<requester>
<reference value="Practitioner/e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
</requester>
<insurance>
<reference value="Coverage/df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
</insurance>
<dosageInstruction>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_DosageFlag">
<valueBoolean value="true" />
</extension>
<text value="2mal tägl. 5ml" />
</dosageInstruction>
<dispenseRequest>
<quantity>
<value value="1" />
<system value="http://unitsofmeasure.org" />
<code value="{Package}" />
</quantity>
</dispenseRequest>
<substitution>
<allowedBoolean value="true" />
</substitution>
</MedicationRequest>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Medication/f568397d-7ba2-46ac-904b-02caec933b42" />
<resource>
<Medication>
<id value="f568397d-7ba2-46ac-904b-02caec933b42" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_ERP_Medication_PZN|1.0.1" />
</Meta>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_Medication_Category">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_Medication_Category" />
<code value="00" />
</valueCoding>
</extension>
<extension url="https://fhir.kbv.de/StructureDeFinition/KBV_EX_ERP_Medication_Vaccine">
<valueBoolean value="false" />
</extension>
<extension url="http://fhir.de/StructureDeFinition/normgroesse">
<valueCode value="N1" />
</extension>
<code>
<coding>
<system value="http://fhir.de/CodeSystem/ifa/pzn" />
<code value="08585997" />
</coding>
<text value="Prospan® Hustensaft 100ml N1" />
</code>
<form>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM" />
<code value="FLE" />
</coding>
</form>
</Medication>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
<resource>
<Patient>
<id value="512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_FOR_Patient|1.0.3" />
</Meta>
<identifier>
<type>
<coding>
<system value="http://fhir.de/CodeSystem/identifier-type-de-basis" />
<code value="GKV" />
</coding>
</type>
<system value="http://fhir.de/NamingSystem/gkv/kvid-10" />
<value value="M310119800" />
</identifier>
<name>
<use value="official" />
<family value="Erbprinzessin von und zu der Schimmelpfennig-Hammerschmidt Federmannssohn">
<extension url="http://fhir.de/StructureDeFinition/humanname-namenszusatz">
<valueString value="Erbprinzessin" />
</extension>
<extension url="http://hl7.org/fhir/StructureDeFinition/humanname-own-prefix">
<valueString value="von und zu der" />
</extension>
<extension url="http://hl7.org/fhir/StructureDeFinition/humanname-own-name">
<valueString value="Schimmelpfennig-Hammerschmidt Federmannssohn" />
</extension>
</family>
<given value="Ingrid" />
</name>
<birthDate value="2010-01-31" />
<address>
<type value="both" />
<line value="Anneliese- und Georg-von-Groscurth-Plaetzchen 149-C">
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-ADXP-houseNumber">
<valueString value="149-C" />
</extension>
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-ADXP-streetName">
<valueString value="Anneliese- und Georg-von-Groscurth-Plaetzchen" />
</extension>
</line>
<line value="5. OG - Hinterhof">
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-ADXP-additionalLocator">
<valueString value="5. OG - Hinterhof" />
</extension>
</line>
<city value="Bad Homburg" />
<postalCode value="60437" />
<country value="D" />
</address>
</Patient>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Practitioner/e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
<resource>
<Practitioner>
<id value="e33d2afd-44c8-462b-80e5-52dbe5ebf359" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_FOR_Practitioner|1.0.3" />
</Meta>
<identifier>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203" />
<code value="LANR" />
</coding>
</type>
<system value="https://fhir.kbv.de/NamingSystem/KBV_NS_Base_ANR" />
<value value="456456534" />
</identifier>
<name>
<use value="official" />
<family value="Weber">
<extension url="http://hl7.org/fhir/StructureDeFinition/humanname-own-name">
<valueString value="Weber" />
</extension>
</family>
<given value="Maximilian" />
<prefix value="Dr.">
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-EN-qualifier">
<valueCode value="AC" />
</extension>
</prefix>
</name>
<qualification>
<code>
<coding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_FOR_Qualification_Type" />
<code value="00" />
</coding>
</code>
</qualification>
<qualification>
<code>
<text value="Facharzt für Kinder- und Jugendmedizin" />
</code>
</qualification>
</Practitioner>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Organization/d2b30a70-9830-4968-ab97-688472b6f9a3" />
<resource>
<Organization>
<id value="d2b30a70-9830-4968-ab97-688472b6f9a3" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_FOR_Organization|1.0.3" />
</Meta>
<identifier>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203" />
<code value="BSNR" />
</coding>
</type>
<system value="https://fhir.kbv.de/NamingSystem/KBV_NS_Base_BSNR" />
<value value="687777700" />
</identifier>
<name value="Kinderarztpraxis" />
<telecom>
<system value="phone" />
<value value="09411234567" />
</telecom>
<address>
<type value="both" />
<line value="Yorckstraße 15">
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-ADXP-houseNumber">
<valueString value="15" />
</extension>
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-ADXP-streetName">
<valueString value="Yorckstraße" />
</extension>
</line>
<line value="Hinterhaus">
<extension url="http://hl7.org/fhir/StructureDeFinition/iso21090-ADXP-additionalLocator">
<valueString value="Hinterhaus" />
</extension>
</line>
<city value="Regensburg" />
<postalCode value="93049" />
<country value="D" />
</address>
</Organization>
</resource>
</entry>
<entry>
<fullUrl value="http://pvs.praxis.local/fhir/Coverage/df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
<resource>
<Coverage>
<id value="df0f2536-97b9-4bae-99cc-83ba2e8371e4" />
<Meta>
<profile value="https://fhir.kbv.de/StructureDeFinition/KBV_PR_FOR_Coverage|1.0.3" />
</Meta>
<extension url="http://fhir.de/StructureDeFinition/gkv/besondere-personengruppe">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_PERSONENGRUPPE" />
<code value="00" />
</valueCoding>
</extension>
<extension url="http://fhir.de/StructureDeFinition/gkv/dmp-kennzeichen">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DMP" />
<code value="00" />
</valueCoding>
</extension>
<extension url="http://fhir.de/StructureDeFinition/gkv/wop">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ITA_WOP" />
<code value="72" />
</valueCoding>
</extension>
<extension url="http://fhir.de/StructureDeFinition/gkv/versichertenart">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_VERSICHERTENSTATUS" />
<code value="3" />
</valueCoding>
</extension>
<status value="active" />
<type>
<coding>
<system value="http://fhir.de/CodeSystem/versicherungsart-de-basis" />
<code value="GKV" />
</coding>
</type>
<beneficiary>
<reference value="Patient/512ab5bc-a7ab-4fd7-81cc-16a594f747a6" />
</beneficiary>
<period>
<end value="2040-04-01" />
</period>
<payor>
<identifier>
<system value="http://fhir.de/NamingSystem/arge-ik/iknr" />
<value value="108416214" />
</identifier>
<display value="AOK Bayern" />
</payor>
</Coverage>
</resource>
</entry>
这就是我到目前为止所得到的...... 我也无法获取作者 (Practitioner) 或部分 (MedicationRequest) 的 URL。
using Hl7.Fhir.Model;
using Hl7.Fhir.Rest;
using Hl7.Fhir.Serialization;
using System;
using System.IO;
using System.Xml;
namespace readxml
{
class Program
{
static void Main(string[] args)
{
XmlReader xr = XmlReader.Create(
new StreamReader(@"<Path>"));
var parser = new FhirXmlParser();
Bundle bundle = parser.Parse<Bundle>(xr);
Console.WriteLine(bundle);
var composition = (Composition)bundle.Entry[0].Resource;
ResourceReference subjectRef = composition.Subject;
//ResourceReference authorRef = composition.Author;
ResourceReference custodianRef = composition.Custodian;
//ResourceReference medRef = composition.Section;
var absUriPatient = subjectRef.GetAbsoluteUriForReference(bundle.Entry[0].FullUrl);
//var absUriPractitioner = authorRef.GetAbsoluteUriForReference(bundle.Entry[0].FullUrl);
var absUriOrganization = custodianRef.GetAbsoluteUriForReference(bundle.Entry[0].FullUrl);
Console.WriteLine($"Patient-URL: {absUriPatient}");
//Console.WriteLine($"Practitioner-URL: {absUriPractitioner}");
Console.WriteLine($"Organization-URL: {absUriOrganization}");
var patient = (Bundle.EntryComponent)bundle.FindEntry(absUriPatient);
Console.WriteLine(patient); //How to get patient.Name ???
Console.ReadKey();
}
}
}
解决方法
您可以执行以下操作:
var entry = bundle.FindEntry(absUriPatient).SingleOrDefault();
var patient = entry.Resource as Patient;
Console.WriteLine($"Given name of patient: {patient?.Name[0].Given.First() }");
因此 bundle.FindEntry
为您提供了一个列表包条目。然后取单个并将 entry.resource
转换为 Patient
。那么你就拥有了耐心的所有属性。
有关使用 Bundle
进行处理的更多信息,请参阅 Firely 文档页面:https://docs.fire.ly/projects/Firely-NET-SDK/model/bundles.html
Marco 的解决方案非常有效。我现在能够获得患者甚至医生的属性。
但是如果资源引用位于资源本身中,如下所示:
<resource>
<MedicationRequest xmlns="http://hl7.org/fhir">
<id value="e930cdee-9eb5-4b44-88b5-2a18b69f3b9a" />
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_ERP_Prescription|1.0.1" />
</meta>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_StatusCoPayment">
<valueCoding>
<system value="https://fhir.kbv.de/CodeSystem/KBV_CS_ERP_StatusCoPayment" />
<code value="0" />
</valueCoding>
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_EmergencyServicesFee">
<valueBoolean value="false" />
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_BVG">
<valueBoolean value="false" />
</extension>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_Multiple_Prescription">
<extension url="Kennzeichen">
<valueBoolean value="false" />
</extension>
</extension>
<status value="active" />
<intent value="order" />
<medicationReference>
<reference value="Medication/5fe6e06c-8725-46d5-aecd-e65e041ca3de" />
</medicationReference>
<subject>
<reference value="Patient/9774f67f-a238-4daf-b4e6-679deeef3811" />
</subject>
<authoredOn value="2021-03-30" />
<requester>
<reference value="Practitioner/20597e0e-cb2a-45b3-95f0-dc3dbdb617c3" />
</requester>
<insurance>
<reference value="Coverage/1b1ffb6e-eb05-43d7-87eb-e7818fe9661a" />
</insurance>
<dosageInstruction>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_ERP_DosageFlag">
<valueBoolean value="true" />
</extension>
<text value="1-0-1-0" />
</dosageInstruction>
<dispenseRequest>
<quantity>
<value value="1" />
<system value="http://unitsofmeasure.org" />
<code value="{Package}" />
</quantity>
</dispenseRequest>
<substitution>
<allowedBoolean value="true" />
</substitution>
</MedicationRequest>
</resource>
我需要获取medicationReference 的引用才能访问Medication 资源。如何做到这一点?