【问题标题】:FHIR JSON to XML parsing issue with fhir-net-api stu2fhir-net-api stu2 的 FHIR JSON 到 XML 解析问题
【发布时间】:2018-03-31 18:08:40
【问题描述】:

我正在使用库 fhir-net-api dstu2 将来自 Restful Web 服务的传入 FHIR JSON 解析为 biztalk 管道组件中的 XML,然后将其传递给 XML 反汇编程序以在 BizTalk 中进行分批。大多数消息都没有问题,但我在偶尔的消息中收到以下错误。

“给定编码中的无效字符。第 1 行,位置 12700。”。

我检查了这些消息,在传入的 JSON 中看不到任何会导致此错误的差异。 查看错误消息中给出的字符位置,fhir-net-api 的 XML 输出显示以下问题。由于某种原因,图书馆缩短了位置并放入了捆绑标签。 <Bundle xmlns="http://hl7.org/fhir"><total value="9" />

对这里发生的事情或如何进行故障排除有任何想法吗?

我无法发布完整的消息,但这里是问题区域的 sn-p。

输入 JSON sn-p

"hospitalization": {"dischargeDiagnosis": [         {
        "reference": "#Reason",
        "display": "DWA-Discharged with Approval"
     }]},
     "location": [{"location": {"display": "SPH 4th Bunny Dr’s Clinic"}}],
     "serviceProvider": {"display": "FOO"}
  }},
  {"resource":       {
     "resourceType": "Encounter",
     "id": "FOO0009-394a-4c51",
     "extension":          [

输出 XML sn-p

<hospitalization>
    <dischargeDiagnosis>
        <reference value="#Reason" />
        <display value="DWA-Discharged with Approval" />
    </dischargeDiagnosis>
</hospitalization>
<location>
    <location>
        <display value="SPH 4<Bundle xmlns="http://hl7.org/fhir">
                        <total value="9" />
<entry>
    <resource>
        <Encounter>

编辑 - 我隔离了问题资源并取消了对消息的识别。这是导致上述错误的完整 JSON 消息。我尝试了 FHIR JSON to XML notepad++ 插件,它正确地序列化了消息。

这是管道组件的代码。

     Hl7.Fhir.Serialization.ResourceReader resourceReader = new Hl7.Fhir.Serialization.ResourceReader(FhirJsonParser.CreateFhirReader(json), ParserSettings.Default);


  string resourceXmlString = Hl7.Fhir.Serialization.FhirSerializer.SerializeResourceToXml(resourceReader.Deserialize());

这是导致问题的 JSON

{
   "resourceType": "Bundle",
   "total": 1,
   "entry":    [
     {"resource":       {
         "resourceType": "Encounter",
         "id": "10000000-0000-0000-000-200000000",
         "extension":          [
                        {
               "url": "https://foo.org/documents/fhir/extensions/encounter-facility",
               "valueString": "St. Foo Hospital"
            },
                        {
               "url": "https://foo.org/documents/fhir/extensions/encounter-service",
               "valueString": "Foo PROGRAM/Foo ECHOCARDIOLOGY"
            },
                        {
               "url": "https://foo.org/documents/fhir/extensions/encounter-patienttype",
               "valueString": "Diagnostic - Outpatient"
            },
                        {
               "url": "https://foo.org/documents/fhir/extensions/encounter-documentcount",
               "valueInteger": 0
            },
                        {
               "url": "https://foo.org/documents/fhir/extensions/encounter-entitysourcesystem",
               "valueString": "CDR"
            },
                        {
               "url": "https://foo.org/documents/fhir/extensions/encounter-mrnid",
               "valueString": "10000000"
            }
         ],
         "identifier":          [
                        {
               "use": "official",
               "value": "1000000-5420-0000-0000-00000"
            },
                        {
               "use": "secondary",
               "value": "100000000000"
            }
         ],
         "patient": {"reference": "Patient/000000000"},
         "participant":          [
                        {
               "type": [               {
                  "coding": [                  {
                     "system": "http://hl7.org/fhir/v3/ParticipationType",
                     "code": "PRCP"
                  }],
                  "text": "Primary Care Physician"
               }],
               "individual": {"display": "Foo, Guy"}
            },
                        {
               "type": [               {
                  "coding": [                  {
                     "system": "http://hl7.org/fhir/v3/ParticipationType",
                     "code": "ATND"
                  }],
                  "text": "Attending Physician"
               }],
               "individual": {"display": "RFoo, JFoo L"}
            }
         ],
         "period":          {
            "start": "2015-10-27T13:59:00+00:00",
            "end": "2017-02-17T09:39:07+00:00"
         },
         "reason": [         {
            "coding": [            {
               "system": "http://www.ihtsdo.org/snomed-ct",
               "code": "33962009"
            }],
            "text": "ECHOCARDIOGRAM"
         }],
         "hospitalization": {"dischargeDiagnosis": [         {
            "reference": "#Reason",
            "display": "DWA-Discharged with Approval"
         }]},
         "location": [{"location": {"display": "SPH 4th Foo Dr’s Clinic"}}],
         "serviceProvider": {"display": "Foo_foo"}
      }}

   ]
}

【问题讨论】:

  • 我认为问题可能在于“Dr's”中的撇号是十六进制 E28099,右单引号,而不是预期的十六进制 27 撇号。
  • 这引出了第二个问题,即 FHIR JSON 消息中允许的十六进制值 E28099。我应该将此问题发送回服务提供商还是自己处理不良数据?

标签: hl7-fhir


【解决方案1】:

错误消息“给定编码中的无效字符”未出现在 FHIR .NET API 的源代码中,但它确实在 .NET XmlReader 的上下文中出现在 google 上。所以,我的第一个猜测是 json 被解析好(在 json 字符串中包含任何 Unicode 字符栏是完全可以的),然后在字符没有被转义的情况下转换为 XML。然后,当 BizTalk 处理 XML 时,它就会遇到麻烦。

这很有趣,因为我只使用 .NET XML 库来序列化为 XML,所以它不应该生成非法的 XML。也许 - 这是在 BizTalk 方面 - 是否有一个设置来指示 BizTalk 中 XML 管道中使用的编码?

【讨论】:

  • 您好 Ewout - 感谢您的回复,错误是由 xml 反汇编程序在 fhir-net-api 将 JSON 序列化为 XML 后生成的。生成的 xml 不正确,并且在遇到“右引号”字符的位置插入了第二个捆绑标记。 (见下文) hl7.org/fhir"> 我已经能够在独立的单元测试中重现上面的 xml 输出,所以它似乎与 BizTalk 无关。
  • 嗨,大卫,您是否介意发布您在此处获得的示例 + 这两行以复制到 github.com/ewoutkramer/fhir-net-api/issues。我可以为你做,但如果你添加它,你将能够跟踪问题的进展。
猜你喜欢
  • 2017-07-06
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多