Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Oracle SQL中的XSD模式自动排列XML元素_Sql_Xml_Oracle_Plsql_Xsd - Fatal编程技术网

根据Oracle SQL中的XSD模式自动排列XML元素

根据Oracle SQL中的XSD模式自动排列XML元素,sql,xml,oracle,plsql,xsd,Sql,Xml,Oracle,Plsql,Xsd,有没有一种方法可以让我使用Oracle SQL根据XSD模式自动排列XML元素? 我正在从Oracle生成一个XML文件,输出如下所示: <tns:SprzedazWiersz> <tns:LpSprzedazy>5</tns:LpSprzedazy> <tns:KodKrajuNadaniaTIN>BB</tns:KodKrajuNadaniaTIN> <tns:NrKontrahenta>43

有没有一种方法可以让我使用Oracle SQL根据XSD模式自动排列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>

我是否有办法将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>

....

在一般情况下,模式定义任意内容模型是一个棘手的问题。但是,如果您知道内容模型将是这样一个简单的
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>

....

@XSD使用的AlexPoole是的,顺序很重要。可以,但我不知道有什么简单的方法可以基于XSD将无效XML转换为有效XML。你可能需要写一个XSLT来完成它。嗯,好吧,我当时没有正确阅读。不过,错误似乎仍然与发布的XML片段不匹配。不过,我会放弃这个…@AlexPoole,当我手动重新排列元素时,错误消失了。我在想如何通过编程来处理这个问题。看。如果你想尝试的话,可以在这个问题上添加“xslt”标记。@AlexPoole XSD使用的是,顺序很重要。可以,但我不知道有什么简单的方法可以基于XSD将无效XML转换为有效XML。你可能需要写一个XSLT来完成它。嗯,好吧,我当时没有正确阅读。不过,错误似乎仍然与发布的XML片段不匹配。不过,我会放弃这个…@AlexPoole,当我手动重新排列元素时,错误消失了。我在想如何通过编程来处理这个问题。看。如果您想尝试,可以在这个问题中添加“xslt”标记。