如何解决两个无界的源变量到单个无界的目标变量的映射
我一直在使用For-each从Single源变量到targe变量。现在,我需要将两个不同的无界变量值映射到单个Target变量。
下面是我为交易创建的XSD模式。
<?xml version="1.0" encoding="UTF-8"?>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/SOATEST/SEQ/SEQBPELProcess" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Request">
<complexType>
<sequence>
<element name="Orders" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Name" type="string"/>
<element name="OrderID" type="int"/>
<element name="Qty" type="int"/>
<element name="Price" type="int"/>
</sequence>
</complexType>
</element>
<element name="Options" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Description" type="string"/>
<element name="catlog" type="string"/>
<element name="Segment" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
<element name="Response">
<complexType>
<sequence>
<element name="Details" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="OrderID" type="string"/>
<element name="Name" type="string"/>
<element name="Catlog" type="string"/>
<element name="Segment" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
所以我将请求同时放入Orders和Options元素。
<?xml version="1.0" encoding="UTF-8" ?>
<Request xmlns="http://xmlns.oracle.com/SOATEST/SEQ/SEQBPELProcess">
<Orders>
<Name>KIHUN</Name>
<OrderID>101</OrderID>
<Qty>3</Qty>
<Price>4584</Price>
</Orders>
<Orders>
<Name>VENCRI</Name>
<OrderID>102</OrderID>
<Qty>4</Qty>
<Price>98547</Price>
</Orders>
<Options>
<Description>DRONWADRO</Description>
<catlog>EMPTU</catlog>
<Segment>HASBK</Segment>
<OrderID>101</OrderID>
</Options>
<Options>
<Description>WAROAIRDRO</Description>
<catlog>FULLSTC</catlog>
<Segment>UVSS</Segment>
<OrderID>102</OrderID>
</Options>
</Request>
除了输出将是
<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:Response xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns0="http://xmlns.oracle.com/SOATEST/SEQ/SEQBPELProcess">
<ns0:Details>
<ns0:OrderID>101</ns0:OrderID>
<ns0:Name>KIHUN</ns0:Name>
<ns0:Catlog>EMPTU</ns0:Catlog>
<ns0:Segment>HASBK</ns0:Segment>
</ns0:Details>
<ns0:Details>
<ns0:OrderID>102</ns0:OrderID>
<ns0:Name>VENCRI</ns0:Name>
<ns0:Catlog>FULLSTC</ns0:Catlog>
<ns0:Segment>UVSS</ns0:Segment>
</ns0:Details>
</ns0:Response>
我尝试通过订单和选项将for-each应用于目标元素,但:(它没有给出例外的输出。
<ns0:Response>
<xsl:for-each select="/ns0:Request/ns0:Orders">
<xsl:for-each select="/ns0:Request/ns0:Options">
<ns0:Details>
有人可以帮我解决这个问题吗?
解决方法
您可以这样做:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://xmlns.oracle.com/SOATEST/SEQ/SEQBPELProcess"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="options_key" match="ns0:Options" use="ns0:OrderID"/>
<xsl:template match="/">
<ns0:Response xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<xsl:apply-templates select="ns0:Request/ns0:Orders"/>
</ns0:Response>
</xsl:template>
<xsl:template match="ns0:Orders">
<ns0:Details>
<ns0:OrderID><xsl:value-of select="ns0:OrderID"/></ns0:OrderID>
<ns0:Name><xsl:value-of select="ns0:Name"/></ns0:Name>
<ns0:Catlog><xsl:value-of select="key('options_key',ns0:OrderID)/ns0:catlog"/></ns0:Catlog>
<ns0:Segment><xsl:value-of select="key('options_key',ns0:OrderID)/ns0:Segment"/></ns0:Segment>
</ns0:Details>
</xsl:template>
</xsl:stylesheet>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。