平面数据库记录到父子XML转换

如何解决平面数据库记录到父子XML转换

我在数据库中有与所有行记录具有相同订单头的记录 谁能帮我如何使用xsl进行转换

<?xml version='1.0' encoding='UTF-8'?>
<getParentChildOutputCollection xmlns="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST/types">
   <getParentChildOutput>
      <PID>1</PID>
      <PNAME>Xerox</PNAME>
      <CID>101</CID>
      <CNAME>Order 101</CNAME>
      <CDESC>Order Paper</CDESC>
   </getParentChildOutput>
   <getParentChildOutput>
      <PID>1</PID>
      <PNAME>Xerox</PNAME>
      <CID>102</CID>
      <CNAME>Order 102</CNAME>
      <CDESC>Order Black Ink</CDESC>
   </getParentChildOutput>
   <getParentChildOutput>
      <PID>1</PID>
      <PNAME>Xerox</PNAME>
      <CID>103</CID>
      <CNAME>Order 103</CNAME>
      <CDESC>Order Staple Pin</CDESC>
   </getParentChildOutput>
   <getParentChildOutput>
      <PID>2</PID>
      <PNAME>HP</PNAME>
      <CID>230</CID>
      <CNAME>Order 230</CNAME>
      <CDESC>Order Red Ink</CDESC>
   </getParentChildOutput>
   <getParentChildOutput>
      <PID>2</PID>
      <PNAME>HP</PNAME>
      <CID>231</CID>
      <CNAME>Order 231</CNAME>
      <CDESC>Order Blue Ink</CDESC>
   </getParentChildOutput>
</getParentChildOutputCollection>

我想使用xsl将sml以上转换为以下输出

<?xml version="1.0" encoding="utf-8"?>
<request-wrapper>
  <TransmissionID>1234</TransmissionID>

  <DeliveryOrders>
    <OrderCode>1</OrderCode>
    <Company>Xerox</Company>
    <Lines>
      <c1d>101</c1d>
      <cname>Order 101</cname>
      <cdesc>Order Paper</cdesc>
    </Lines>
    <Lines>
      <c1d>102</c1d>
      <cname>Order 102</cname>
      <cdesc>Order Black Ink</cdesc>
    </Lines>
    <Lines>
      <c1d>3</c1d>
      <cname>Order 103</cname>
      <cdesc>Order Staple Pin</cdesc>
    </Lines>
  </DeliveryOrders>

  <DeliveryOrders>
    <OrderCode>2</OrderCode>
    <Company>p2</Company>
    <Lines>
      <c1d>230</c1d>
      <cname>Order 230</cname>
      <cdesc>Order Red Ink</cdesc>
    </Lines>
    <Lines>
      <c1d>231</c1d>
      <cname>Order 231</cname>
      <cdesc>Order Blue Ink</cdesc>
    </Lines>
  </DeliveryOrders>
</request-wrapper>

我使用了下面的xsl,但是在我正在工作的应用程序中,它无法工作,无法识别key和generate-id命令。我还有其他方法可以实现吗?

<?xml version = '1.0' encoding = 'UTF-8'?>
<xsl:stylesheet version="2.0" xml:id="id_1" xmlns:nssrcmpr="http://www.oracle.com/2014/03/ics/schedule" xmlns:nstrgdfl="http://xmlns.oracle.com/cloud/adapter/ftp/writejson/types" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:nstrgmpr="http://xmlns.oracle.com/cloud/adapter/ftp/writejson_REQUEST/types" xmlns:ora="http://schemas.oracle.com/xpath/extension" xmlns:oracle-xsl-mapper="http://www.oracle.com/xsl/mapper/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns1="http://xml.oracle.com/adapters/extension" xmlns:ns5="http://xmlns.oracle.com/cloud/adapter/ftp/writejson_REQUEST" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes=" nssrcmpr oraext xsd xp20 ora oracle-xsl-mapper xsi fn ns1 xsl ignore01" xmlns:ignore01="http://www.oracle.com/XSL/Transform/java" ignore01:ignorexmlids="true" xmlns:nsmpr0="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST/types" xmlns:nsmpr1="http://www.oracle.com/2014/03/ic/integration/metadata" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:ns23="http://xmlns.oracle.com/cloud/ftp/write/response/pull" xmlns:flt="http://xmlns.oracle.com/cloud/generic/service/fault" xmlns:dvm="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.functions.dvm.DVMFunctions" xmlns:orajs0="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1453381219" xmlns:ns22="http://xml.oracle.com/types" xmlns:orajs6="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1211296200" xmlns:orajs3="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath213937888" xmlns:orajs1="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath562866038" xmlns:orajs7="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath86288" xmlns:tns="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST" xmlns:ns2="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.resources.icsxpathfunctions.ICSInstanceTrackingFunctions" xmlns:orajs2="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1600802978" xmlns:orajs5="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath2113524327" xmlns:orajs4="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1290874520" xmlns:ns0="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue">
   <oracle-xsl-mapper:schema xml:id="id_2">
      <!--SPECIFICATION OF MAP SOURCES AND TARGETS,DO NOT MODIFY.-->
      <oracle-xsl-mapper:mapSources xml:id="id_3">
         <oracle-xsl-mapper:source type="XSD" xml:id="id_4">
            <oracle-xsl-mapper:schema location="../../processor_13/resourcegroup_14/ICSSchedule_1.xsd" xml:id="id_5"/>
            <oracle-xsl-mapper:rootElement name="schedule" namespace="http://www.oracle.com/2014/03/ics/schedule" xml:id="id_6"/>
         </oracle-xsl-mapper:source>
      <oracle-xsl-mapper:source type="WSDL" xml:id="id_13">
            <oracle-xsl-mapper:schema location="../../application_27/inbound_28/resourcegroup_29/getParentChild_REQUEST.wsdl" xml:id="id_14"/>
            <oracle-xsl-mapper:rootElement name="getParentChildOutputCollection" namespace="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST/types" xml:id="id_15"/>
            <oracle-xsl-mapper:param name="getParentChild" xml:id="id_16"/>
         </oracle-xsl-mapper:source>
      </oracle-xsl-mapper:mapSources>
      <oracle-xsl-mapper:mapTargets xml:id="id_7">
         <oracle-xsl-mapper:target type="WSDL" xml:id="id_8">
            <oracle-xsl-mapper:schema location="../../application_49/inbound_50/resourcegroup_51/writejson_REQUEST.wsdl" xml:id="id_9"/>
            <oracle-xsl-mapper:rootElement name="WriteFile" namespace="http://xmlns.oracle.com/cloud/adapter/ftp/writejson_REQUEST/types" xml:id="id_10"/>
         </oracle-xsl-mapper:target>
      </oracle-xsl-mapper:mapTargets>
      <!--GENERATED BY ORACLE XSL MAPPER 12.1.2.0.0-->
   </oracle-xsl-mapper:schema>
   <!--User Editing allowed BELOW this line - DO NOT DELETE THIS LINE-->
   <xsl:param name="getParentChild" xml:id="id_25"/>
   
   <xsl:key name="keyHeader" match="nsmpr0:getParentChildOutput" use="nsmpr0:PID" />
   <xsl:key name="keyLines" match="nsmpr0:getParentChildOutput" use="concat(nsmpr0:PID,'#',nsmpr0:CID)" />   
   
   <xsl:template match="/" xml:id="id_11">
      <nstrgmpr:WriteFile xml:id="id_12">
         <nstrgdfl:request-wrapper xml:id="id_31"> 
            <!--<xsl:for-each xml:id="id_33" select="$getParentChild/nsmpr0:getParentChildOutputCollection/nsmpr0:getParentChildOutput">-->
            <xsl:for-each xml:id="id_33" select="row[generate-id() = generate-id(key('keyHeader',nsmpr0:PID)[1])]"> <!--Sreejit 1 -->
               <nstrgdfl:DeliveryOrders xml:id="id_34">
                  <nstrgdfl:OrderCode xml:id="id_40">
                     <xsl:value-of xml:id="id_41" select="nsmpr0:PID"/>
                  </nstrgdfl:OrderCode>
                  <nstrgdfl:Company xml:id="id_38">
                     <xsl:value-of xml:id="id_42" select="nsmpr0:PNAME"/>
                  </nstrgdfl:Company>
             <!-- <xsl:for-each xml:id="id_36" select="."> -->
                <xsl:for-each xml:id="id_36" select="key('keyHeader',nsmpr0:PID)[generate-id() = generate-id(key('keyLines',concat(nsmpr0:PID,nsmpr0:CID))[1])]"> <!--Sreejit 2 -->
                     <nstrgdfl:Lines xml:id="id_37">
                        <nstrgdfl:c1d xml:id="id_43">
                           <xsl:value-of xml:id="id_44" select="nsmpr0:CID"/>
                        </nstrgdfl:c1d>
                        <nstrgdfl:cname xml:id="id_45">
                           <xsl:value-of xml:id="id_46" select="nsmpr0:CNAME"/>
                        </nstrgdfl:cname>
                        <nstrgdfl:cdesc xml:id="id_47">
                           <xsl:value-of xml:id="id_48" select="nsmpr0:CDESC"/>
                        </nstrgdfl:cdesc>
                     </nstrgdfl:Lines>
                  </xsl:for-each>
               </nstrgdfl:DeliveryOrders>
            </xsl:for-each>
         </nstrgdfl:request-wrapper>
      </nstrgmpr:WriteFile>
   </xsl:template>
</xsl:stylesheet>

关于, 斯里

解决方法

您的说明:

<xsl:for-each xml:id="id_33" select="row[generate-id() = generate-id(key('keyHeader',nsmpr0:PID)[1])]">

不选择任何内容,因为在当前上下文中(或者在整个输入文档中)没有名为row的元素。


旁注:您的样式表已标记为version="2.0",但您正尝试使用Muenchian分组-这几乎没有道理。

,

我粘贴了有效的代码,仅供其他人使用,以防有人

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version="2.0" xml:id="id_1" xmlns:nssrcmpr="http://www.oracle.com/2014/03/ics/schedule" xmlns:nstrgdfl="http://xmlns.oracle.com/cloud/adapter/ftp/writejson/types" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:nstrgmpr="http://xmlns.oracle.com/cloud/adapter/ftp/writejson_REQUEST/types" xmlns:ora="http://schemas.oracle.com/xpath/extension" xmlns:oracle-xsl-mapper="http://www.oracle.com/xsl/mapper/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns1="http://xml.oracle.com/adapters/extension" xmlns:ns5="http://xmlns.oracle.com/cloud/adapter/ftp/writejson_REQUEST" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes=" nssrcmpr oraext xsd xp20 ora oracle-xsl-mapper xsi fn ns1 xsl ignore01" xmlns:ignore01="http://www.oracle.com/XSL/Transform/java" ignore01:ignorexmlids="true" xmlns:nsmpr0="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST/types" xmlns:nsmpr1="http://www.oracle.com/2014/03/ic/integration/metadata" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:ns23="http://xmlns.oracle.com/cloud/ftp/write/response/pull" xmlns:flt="http://xmlns.oracle.com/cloud/generic/service/fault" xmlns:dvm="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.functions.dvm.DVMFunctions" xmlns:orajs0="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1453381219" xmlns:ns22="http://xml.oracle.com/types" xmlns:orajs6="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1211296200" xmlns:orajs3="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath213937888" xmlns:orajs1="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath562866038" xmlns:orajs7="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath86288" xmlns:tns="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST" xmlns:ns2="http://www.oracle.com/XSL/Transform/java/com.bea.wli.sb.resources.icsxpathfunctions.ICSInstanceTrackingFunctions" xmlns:orajs2="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1600802978" xmlns:orajs5="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath2113524327" xmlns:orajs4="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.JsExecutor_xpath1290874520" xmlns:ns0="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue">
    <oracle-xsl-mapper:schema xml:id="id_2">
        <!--SPECIFICATION OF MAP SOURCES AND TARGETS,DO NOT MODIFY.-->
        <oracle-xsl-mapper:mapSources xml:id="id_3">
            <oracle-xsl-mapper:source type="XSD" xml:id="id_4">
                <oracle-xsl-mapper:schema location="../../processor_13/resourcegroup_14/ICSSchedule_1.xsd" xml:id="id_5"/>
                <oracle-xsl-mapper:rootElement name="schedule" namespace="http://www.oracle.com/2014/03/ics/schedule" xml:id="id_6"/>
            </oracle-xsl-mapper:source>
            <oracle-xsl-mapper:source type="WSDL" xml:id="id_13">
                <oracle-xsl-mapper:schema location="../../application_27/inbound_28/resourcegroup_29/getParentChild_REQUEST.wsdl" xml:id="id_14"/>
                <oracle-xsl-mapper:rootElement name="getParentChildOutputCollection" namespace="http://xmlns.oracle.com/cloud/adapter/dbaasdatabase/getParentChild_REQUEST/types" xml:id="id_15"/>
                <oracle-xsl-mapper:param name="getParentChild" xml:id="id_16"/>
            </oracle-xsl-mapper:source>
        </oracle-xsl-mapper:mapSources>
        <oracle-xsl-mapper:mapTargets xml:id="id_7">
            <oracle-xsl-mapper:target type="WSDL" xml:id="id_8">
                <oracle-xsl-mapper:schema location="../../application_49/inbound_50/resourcegroup_51/writejson_REQUEST.wsdl" xml:id="id_9"/>
                <oracle-xsl-mapper:rootElement name="WriteFile" namespace="http://xmlns.oracle.com/cloud/adapter/ftp/writejson_REQUEST/types" xml:id="id_10"/>
            </oracle-xsl-mapper:target>
        </oracle-xsl-mapper:mapTargets>
        <!--GENERATED BY ORACLE XSL MAPPER 12.1.2.0.0-->
    </oracle-xsl-mapper:schema>
    <!--User Editing allowed BELOW this line - DO NOT DELETE THIS LINE-->
    <xsl:param name="getParentChild" xml:id="id_25"/>
    <xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="no"/>
    <xsl:template match="/" xml:id="id_11">
        <nstrgmpr:WriteFile xml:id="id_12">
            <nstrgdfl:request-wrapper xml:id="id_31">
                <xsl:for-each-group xml:id="id_33" select="$getParentChild/nsmpr0:getParentChildOutputCollection/nsmpr0:getParentChildOutput" group-by="nsmpr0:PID">
                    <nstrgdfl:DeliveryOrders xml:id="id_34">
                        <nstrgdfl:OrderCode xml:id="id_40">
                            <xsl:value-of xml:id="id_41" select="nsmpr0:PID"/>
                        </nstrgdfl:OrderCode>
                        <nstrgdfl:Company xml:id="id_38">
                            <xsl:value-of xml:id="id_42" select="nsmpr0:PNAME"/>
                        </nstrgdfl:Company>
                        <xsl:for-each select="fn:current-group()">
                            <nstrgdfl:Lines xml:id="id_37">
                                <nstrgdfl:c1d xml:id="id_43">
                                    <xsl:value-of xml:id="id_44" select="nsmpr0:CID"/>
                                </nstrgdfl:c1d>
                                <nstrgdfl:cname xml:id="id_45">
                                    <xsl:value-of xml:id="id_46" select="nsmpr0:CNAME"/>
                                </nstrgdfl:cname>
                                <nstrgdfl:cdesc xml:id="id_47">
                                    <xsl:value-of xml:id="id_48" select="nsmpr0:CDESC"/>
                                </nstrgdfl:cdesc>
                            </nstrgdfl:Lines>
                        </xsl:for-each>
                    </nstrgdfl:DeliveryOrders>
                </xsl:for-each-group>
            </nstrgdfl:request-wrapper>
        </nstrgmpr:WriteFile>
    </xsl:template>
</xsl:stylesheet>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-