노드 1 :트래버스 하나의 XSLT에서 두 개의 서로 다른 XML 노드의 모든 하위 노드를 통해
<retrieveSubscriberDetailResponse xmlns:client="http://xmlns.oracle.com/SBLPOAP/POAPRetrieveSubscriberDetail/POAPRetrieveSubscriberDetailProcess" xmlns="http://xmlns.oracle.com/SBLPOAP/POAPRetrieveSubscriberDetail/POAPRetrieveSubscriberDetailProcess">
<client:promotions>
<client:promotion>
<client:id>139</client:id>
<client:name>P_499_Wolverine</client:name>
<client:Description/>
<client:activationDt>2015-05-10T02:37:16+08:00</client:activationDt> <client:expiryDt/>
</client:promotion>
<client:promotion>
<client:id>71</client:id>
<client:name>Free XYZP</client:name>
<client:Description/>
<client:activationDt>2016-01-29T15:30:58+08:00</client:activationDt>
<client:expiryDt>2017-06-01T00:00:00+08:00</client:expiryDt>
</client:promotion>
</client:promotions>
</retrieveSubscriberDetailResponse>
노드 2 :
<processResponse xmlns:ns3="http://xmlns.oracle.com/Custom/KPProductsAPI/KPProductsAPI" xmlns="http://xmlns.oracle.com/Custom/KPProductsAPI/KPProductsAPI">
<ns3:promotions>
<ns3:promotion>
<ns3:id>139</ns3:id>
<ns3:name>KP_MHP_499_Wolverine_KP</ns3:name>
<ns3:activationDt>2015-05-10T02:37:16+08:00</ns3:activationDt>
</ns3:promotion>
<ns3:promotion>
<ns3:id>140</ns3:id>
<ns3:name>PQR_XYZ_499_Wolverine_KP</ns3:name>
<ns3:activationDt>2015-05-10T02:37:16+08:00</ns3:activationDt>
</ns3:promotion>
</ns3:promotions>
</processResponse>
예상 출력 :
<output>
<promotions>
<promotion>
<id>139</client:id>
<name>KP_MHP_499_Wolverine_KP</name>
<activationDt>2015-05-10T02:37:16+08:00</activationDt>
</promotion>
<promotion>
<id>71</id>
<name>Free XYZP</name>
<Description/>
<activationDt>2016-01-29T15:30:58+08:00</activationDt>
<expiryDt>2017-06-01T00:00:00+08:00</expiryDt>
</promotion>
</promotions>
</output>
이 두 노드는 입력 내 xslt. 내 출력 XML에는 "retrieveSubscriberDetailResponse"의 모든 프로모션이 있어야하며 "processresponse"의 프로모션 ID와 프로모션 ID가 일치하는 경우 "processresponse"의 프로모션 세부 정보를 선택해야합니다. 위에 주어진 Node1과 Node2 (xslt에 대한 입력). 아무도 이것을 달성하는 데 나를 도울 수 있습니까?
이 시도하지만 운 :(:(
<xsl:stylesheet version="2.0" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns2="http://www.abs-c.com/LoggingVariables"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns3="http://xmlns.oracle.com/Custom/LFProductsAPI/LFProductsAPI"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:client="http://xmlns.oracle.com/SBLMVNE/MVNERetrieveSubscriberDetail/MVNERetrieveSubscriberDetailProcess"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:ns0="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns4="http://xmlns.oracle.com/Custom/ParsingTwoNodesSample/BPELProcess1"
xmlns:ns1="http://schemas.oracle.com/bpel/extension"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl ns2 plnk soap ns3 wsdl client ns0 xsd ns1 ns4 bpws xp20 bpel bpm ora socket mhdr oraext dvm hwf med ids xdk xref ldap" >
<xsl:param name="Invoke2_process_OutputVariable.payload"/>
<xsl:key name="cust" match="ns3:promotion" use="ns3:id"/>
<xsl:template match="/">
<ns4:processResponse>
<ns4:subscribers>
<ns4:Subscriber>
<ns4:promotions>
<xsl:for-each select="/client:retrieveSubscriberDetailResponse/client:subscribers/client:Subsc riber/client:promotions/client:promotion/client:id">
<!--<xsl:for-each select="$Invoke2_process_OutputVariable.payload/ns3:processResponse/ns3:promotio ns/ns3:promotion/ns3:id">-->
<xsl:variable name="lf" select="key('cust', .)"/>
<ns4:promotion>
<ns4:id>
<xsl:value-of select="$lf/ns3:id"/>
</ns4:id>
<ns4:name>
<xsl:value-of select="$lf/ns3:name"/>
</ns4:name>
</ns4:promotion>
</xsl:for-each>
</ns4:promotions>
</ns4:Subscriber>
</ns4:subscribers>
</ns4:processResponse>
</xsl:template>
문제를 재현 할 수 있도록 최소한이지만 완전한 코드 스 니펫을 게시하십시오. 네임 스페이스 선언없이 XSLT를 보여주는 것은 의미가 없습니다. 코드에 관해서는' '는 아마도 ' –
감사합니다. 이름 공간 @Martin Honnen으로 업데이트했습니다. –
부분적인 해결책은 http://xsltransform.net/94AbWAV를 참조하십시오. 누락 된 요소를 추가해야하며 샘플 데이터에서 '71'과 같이 일치하는 항목이 없으면 출력 할 데이터를 결정해야합니다. –