Преобразование XML с префиксами в JSONB - PullRequest
1 голос
/ 27 января 2020

У меня проблема с преобразованием XML в JSONB с использованием psql. Я видел topi c, но это не покрывает проблему префиксов. Упомянутая там функция работает для xml без префиксов. Если я избавлюсь от каждого префикса, он будет работать хорошо.

Итак, у меня есть этот фрагмент кода в CTE:

with XML_DATA as (
values(
'<?xml version="1.0" encoding="utf-8"?>
<aixm-message-5.1:AIXMBasicMessage xsi:schemaLocation="http://www.aixm.aero/schema/5.1/message http://www.aixm.aero/schema/5.1/message/AIXM_BasicMessage.xsd" gml:id="gmlAranID1" xmlns:aixm-message-5.1="http://www.aixm.aero/schema/5.1/message" xmlns:aixm-5.1="http://www.aixm.aero/schema/5.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml/3.2">
<aixm-message-5.1:hasMember>
    <aixm-5.1:VerticalStructure gml:id="urn.uuid.1eafbe0e-f7ea-4cae-ad63-0cad113e236e">
      <gml:identifier codeSpace="">1eafbe0e-f7ea-4cae-ad63-0cad113e236e</gml:identifier>
      <aixm-5.1:timeSlice>
        <aixm-5.1:VerticalStructureTimeSlice gml:id="gmlAranID133">
          <gml:validTime>
            <gml:TimePeriod gml:id="gmlAranID134">
              <gml:beginPosition>2017-01-05T00:00:00Z</gml:beginPosition>
              <gml:endPosition/>
            </gml:TimePeriod>
          </gml:validTime>
          <aixm-5.1:interpretation>BASELINE</aixm-5.1:interpretation>
          <aixm-5.1:sequenceNumber>5</aixm-5.1:sequenceNumber>
          <aixm-5.1:correctionNumber>0</aixm-5.1:correctionNumber>
          <aixm-5.1:timeSliceMetadata/>
          <aixm-5.1:featureLifetime>
            <gml:TimePeriod gml:id="gmlAranID135">
              <gml:beginPosition>2017-01-05T00:00:00Z</gml:beginPosition>
              <gml:endPosition/>
            </gml:TimePeriod>
          </aixm-5.1:featureLifetime>
          <aixm-5.1:name>VENTSPILS (09)</aixm-5.1:name>
          <aixm-5.1:type>WINDMILL</aixm-5.1:type>
          <aixm-5.1:lighted>YES</aixm-5.1:lighted>
          <aixm-5.1:markingICAOStandard>YES</aixm-5.1:markingICAOStandard>
          <aixm-5.1:group>NO</aixm-5.1:group>
          <aixm-5.1:length nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:width nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:radius nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:lightingICAOStandard nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:synchronisedLighting nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:marker nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:part>
            <aixm-5.1:VerticalStructurePart gml:id="gmlAranID136">
              <aixm-5.1:annotation>
                <aixm-5.1:Note gml:id="gmlAranID137">
                  <aixm-5.1:propertyName>metadata</aixm-5.1:propertyName>
                  <aixm-5.1:purpose>DESCRIPTION</aixm-5.1:purpose>
                  <aixm-5.1:translatedNote>
                    <aixm-5.1:LinguisticNote gml:id="gmlAranID138">
                      <aixm-5.1:note lang="eng">Data originator identifier – LGIA 02; Data source identifier – LGIA;  Horizontal confidence level - 90%; Horizontal resolution - 5 decimal places; Horizontal reference system - WGS84; Vertical confedence level - 90%; Vertical resolution – 1 m; Integrity – routine.</aixm-5.1:note>
                    </aixm-5.1:LinguisticNote>
                  </aixm-5.1:translatedNote>
                </aixm-5.1:Note>
              </aixm-5.1:annotation>
              <aixm-5.1:verticalExtent uom="M">140</aixm-5.1:verticalExtent>
              <aixm-5.1:horizontalProjection_location>
                <aixm-5.1:ElevatedPoint gml:id="gmlAranID139" srsName="urn:ogc:def:crs:OGC:1.3:CRS84">
                  <gml:pos>21.7135 57.37485</gml:pos>
                  <aixm-5.1:horizontalAccuracy uom="M">0.044</aixm-5.1:horizontalAccuracy>
                  <aixm-5.1:elevation uom="M">150</aixm-5.1:elevation>
                  <aixm-5.1:verticalDatum>EGM_96</aixm-5.1:verticalDatum>
                  <aixm-5.1:verticalAccuracy uom="M">0.067</aixm-5.1:verticalAccuracy>
                </aixm-5.1:ElevatedPoint>
              </aixm-5.1:horizontalProjection_location>
            </aixm-5.1:VerticalStructurePart>
          </aixm-5.1:part>
          <aixm-5.1:hostedPassengerService nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:supportedGroundLight nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:hostedNavaidEquipment nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:hostedSpecialNavStation nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:hostedUnit nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:hostedOrganisation nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:supportedService nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:annotation nilReason="unknown" xsi:nil="true"/>
          <aixm-5.1:lightingAvailability nilReason="unknown" xsi:nil="true"/>
        </aixm-5.1:VerticalStructureTimeSlice>
      </aixm-5.1:timeSlice>
    </aixm-5.1:VerticalStructure>
  </aixm-message-5.1:hasMember>
  </aixm-message-5.1:AIXMBasicMessage>'::xml)
    )

Но я не могу получить все глубоко вложенные атрибуты и префиксы.

Спасибо за все идеи.

...