sql - 在 Oracle SQL 中根据 XSD Schema 自动排列 XML 元素
问题描述
有没有办法让我使用 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/ “":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 时引用它?谢谢!
解决方案
在一般情况下,这是一个棘手的问题,其中模式定义了任意内容模型。但是,如果您知道内容模型将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>
推荐阅读
- c# - 需要从c#中的字符串中提取列名
- ruby-on-rails - 在 Rspec 中使用 2 个独立的数据库来测试库
- macos - 如何在不升级操作系统的情况下修复 vscode Language Server 的错误
- docker - 无法在 COPY 指令中使用 ARG 构建 Docker 多阶段映像
- inno-setup - 在 Inno Setup 中备份以前的安装,同时排除一些文件夹(备份文件夹本身)
- reactjs - 如何在 Firebase 托管中执行查询字符串?
- wordpress - 仅在 WordPress 中登录后显示的联系表格 7 更改
- angular - 如何使第一个 rootLevelNode 默认打开
- android - 未通话时 Android 将麦克风静音
- objective-c - AVAssetDownloadURLSession 内存泄漏