【问题标题】:Automatically arrange XML Elements according to XSD Schema in Oracle SQL在 Oracle SQL 中根据 XSD Schema 自动排列 XML 元素
【发布时间】:2020-07-01 17:05:35
【问题描述】:

有没有办法让我使用 Oracle SQL 根据 XSD Schema 自动排列 XML 元素? 我正在从 Oracle 生成一个 XML 文件,输出如下所示:

  <tns:SprzedazWiersz>
    <tns:LpSprzedazy>5</tns:LpSprzedazy>
    <tns:KodKrajuNadaniaTIN>BB</tns:KodKrajuNadaniaTIN>
    <tns:NrKontrahenta>43815678</tns:NrKontrahenta>
    <tns:NazwaKontrahenta>Business World</tns:NazwaKontrahenta>
    <tns:DowodSprzedazy>48</tns:DowodSprzedazy>
    <tns:DataWystawienia>2016-11-01</tns:DataWystawienia>
    <tns:DataSprzedazy>2016-11-30</tns:DataSprzedazy>
    <tns:B_MPV_PROWIZJA>1</tns:B_MPV_PROWIZJA>
    <tns:EE>1</tns:EE>
    <tns:I_63>1</tns:I_63>
    <tns:TP>1</tns:TP>
    <tns:K_10>.05</tns:K_10>
    <tns:K_11>.3</tns:K_11>
    <tns:K_12>1</tns:K_12>
    <tns:K_14>3.35</tns:K_14>
    <tns:K_17>.22</tns:K_17>
    <tns:K_20>2</tns:K_20>
    <tns:K_30>5</tns:K_30>
    <tns:K_31>4</tns:K_31>
  </tns:SprzedazWiersz>

错误信息指向tns:EE

Cvc-complex-type.2.4.a:发现无效内容开始于 元素“tns:EE”。之一 '{"http://crd.gov.pl/wzor/2020/03/06/9196/":DokumentZakupu, "http://crd.gov.pl/wzor/2020/03/06/9196/":MPP, "http://crd.gov.pl/wzor/2020/03/06/9196/":IMP, "http://crd.gov.pl/wzor/2020/03/06/9196/":K_40, "http://crd.gov.pl/wzor/2020/03/06/9196/":K_42, "http://crd.gov.pl/wzor/2020/03/06/9196/":K_44, "http://crd.gov.pl/wzor/2020/03/06/9196/":K_45, "http://crd.gov.pl/wzor/2020/03/06/9196/":K_46, "http://crd.gov.pl/wzor/2020/03/06/9196/":K_47, "http://crd.gov.pl/wzor/2020/03/06/9196/":ZakupVAT_Marza}' 是 预期。第 '202' 行,第 13 列。

基于 XSD,元素序列如下:

<xsd:sequence minOccurs="0">
    <xsd:annotation>
        <xsd:documentation>Oznaczenia dotyczące procedur</xsd:documentation>
    </xsd:annotation>
    <xsd:element name="SW" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Dostawa w ramach sprzedaży wysyłkowej z terytorium kraju, o której mowa w art. 23 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="EE" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Świadczenie usług telekomunikacyjnych, nadawczych i elektronicznych, o których mowa w art. 28k ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="TP" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Istniejące powiązania między nabywcą a dokonującym dostawy towarów lub usługodawcą, o których mowa w art. 32 ust. 2 pkt 1 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="TT_WNT" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Wewnątrzwspólnotowe nabycie towarów dokonane przez drugiego w kolejności podatnika VAT w ramach transakcji trójstronnej w procedurze uproszczonej, o której mowa w dziale XII rozdziale 8 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="TT_D" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Dostawa towarów poza terytorium kraju dokonana przez drugiego w kolejności podatnika VAT w ramach transakcji trójstronnej w procedurze uproszczonej, o której mowa w dziale XII rozdziale 8 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="MR_T" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Świadczenie usług turystyki opodatkowane na zasadach marży zgodnie z art. 119 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="MR_UZ" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Dostawa towarów używanych, dzieł sztuki, przedmiotów kolekcjonerskich i antyków, opodatkowana na zasadach marży zgodnie z art. 120 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="I_42" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Wewnątrzwspólnotowa dostawa towarów następująca po imporcie tych towarów w ramach procedury celnej 42 (import)</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="I_63" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Wewnątrzwspólnotowa dostawa towarów następująca po imporcie tych towarów w ramach procedury celnej 63 (import)</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="B_SPV" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Transfer bonu jednego przeznaczenia dokonany przez podatnika działającego we własnym imieniu, opodatkowany zgodnie z art. 8a ust. 1 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="B_SPV_DOSTAWA" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Dostawa towarów oraz świadczenie usług, których dotyczy bon jednego przeznaczenia na rzecz podatnika, który wyemitował bon zgodnie z art. 8a ust. 4 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="B_MPV_PROWIZJA" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Świadczenie usług pośrednictwa oraz innych usług dotyczących transferu bonu różnego przeznaczenia, opodatkowane zgodnie z art. 8b ust. 2 ustawy</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="MPP" type="etd:TWybor1" minOccurs="0">
        <xsd:annotation>
            <xsd:documentation>Transakcja objęta obowiązkiem stosowania mechanizmu podzielonej płatności</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
</xsd:sequence>

我有没有办法将 XSD 存储在数据库中并在排列 XML 时引用它?谢谢!

【问题讨论】:

  • @AlexPoole XSD 使用xsd:sequence 所以是的,顺序很重要。你可以validate your XmlType against the XSD,但是我不知道有一种简单的方法可以将无效的 XML 转换为基于 XSD 的有效 XML。您可能必须编写一个 XSLT 才能做到这一点。
  • 嗯,好吧,我当时没看清楚。不过,该错误似乎仍然与发布的 XML 片段不匹配。不过我会离开这个...
  • @AlexPoole,当我手动重新排列元素时,错误消失了。我在考虑如何以编程方式处理这个问题。
  • this similar question for how to rearrange your nodes with an XSLT Identity Transform。如果您想尝试,可以在此问题中添加“xslt”标签。

标签: sql xml oracle plsql xsd


【解决方案1】:

在一般情况下这是一个棘手的问题,其中架构定义了任意内容模型。但是,如果您知道内容模型将是一个简单的 xs:sequence 像这样,那么它可能只是易于处理。例如,您可以从架构中提取这样的元素列表

<xsl:variable name="ordering">
    <elem name="SW" index="1"/>
    <elem name="EE" index="2"/>
    ...
</xsl:variable>

然后您可以在 XSLT 中对数据进行排序:

<xsl:for-each select="data">
  <xsl:sort select="number($ordering/elem[@name=local-name(current())]/@index)"/>
  ....
</xsl:for-each>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多