Я новичок в XSLT и застрял с проблемой.
У меня есть два xml-файла, как указано ниже, и мне нужно выбрать только активные аккаунты из source1.xml, когда "account_no" и "dunningStep"учетной записи в source1.xml совпадает со значениями «account_no» и «dunningStep» в source2.xml.
Также, если для учетной записи в source2.xml существует несколько шагов напоминания, тогда необходимо соответствовать наибольшему »dunningStep "в source2.xml с" dunningStep "в source1.xml.
Источник 1:
<accounts>
<account1>
<name>abc</name>
<account_no>123</account_no>
<status>Active</status>
<dunningStep>1</dunningStep>
</account1>
<account2>
<name>def</name>
<account_no>123</account_no>
<status>Active</status>
<dunningStep>3</dunningStep>
</account2>
<account3>
<name>ghi</name>
<account_no>1234</account_no>
<status>Active</status>
<dunningStep>2</dunningStep>
</account3>
<account4>
<name>jkl</name>
<account_no>1234</account_no>
<status>Active</status>
<dunningStep>1</dunningStep>
</account4>
<account5>
<name>lkj</name>
<account_no>1234</account_no>
<status>In Active</status>
<dunningStep>1</dunningStep>
</account5>
</accounts>
Источник 2:
<plans>
<plan1>
<name>abc</name>
<account_no>123</account_no>
<dunningStep>1</dunningStep>
</plan1>
<plan2>
<name>def</name>
<account_no>123</account_no>
<dunningStep>3</dunningStep>
</plan2>
<plan3>
<name>jkl</name>
<account_no>1234</account_no>
<dunningStep>1</dunningStep>
</plan3>
</plans>
Ожидаемый результат:
<accounts>
<account2>
<name>def</name>
<account_no>123</account_no>
<status>Active</status>
<dunningStep>3</dunningStep>
</account2>
<account4>
<name>jkl</name>
<account_no>1234</account_no>
<status>Active</status>
<dunningStep>1</dunningStep>
</account4>
</accounts>
Я пробовал ниже XSLT, но он не работает для меня.
<oracle-xsl-mapper:schema>
<!--SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY.-->
<oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:source type="WSDL">
<oracle-xsl-mapper:schema location="../WSDLs/GetAriaAccountDetails.wsdl"/>
<oracle-xsl-mapper:rootElement name="get_acct_details_all_mResponseElement"
namespace="urn:client:api:wsdl:document/literal_wrapped:vers:6.50:aria_complete_m_api"/>
</oracle-xsl-mapper:source>
<oracle-xsl-mapper:source type="WSDL">
<oracle-xsl-mapper:schema location="../WSDLs/Billing_Subscription_Dunning_Process.wsdl"/>
<oracle-xsl-mapper:rootElement name="DunningDetails" namespace="urn:subaru:canonical:DunningSchema:1"/>
<oracle-xsl-mapper:param name="ReceiveDunningRequest_process_dunning_InputVariable.part1"/>
</oracle-xsl-mapper:source>
</oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:mapTargets>
<oracle-xsl-mapper:target type="WSDL">
<oracle-xsl-mapper:schema location="../WSDLs/GetAriaAccountDetails.wsdl"/>
<oracle-xsl-mapper:rootElement name="get_acct_details_all_mResponseElement"
namespace="urn:client:api:wsdl:document/literal_wrapped:vers:6.50:aria_complete_m_api"/>
</oracle-xsl-mapper:target>
</oracle-xsl-mapper:mapTargets>
<!--GENERATED BY ORACLE XSL MAPPER 12.2.1.2.0(XSLT Build 161003.0739.0018) AT [FRI OCT 11 11:21:53 IST 2019].-->
</oracle-xsl-mapper:schema>
<!--User Editing allowed BELOW this line - DO NOT DELETE THIS LINE-->
<xsl:param name="ReceiveRequest2.part1"/>
<xsl:key name="acc"
match="*[starts-with(name(), 'account') and (ns0:status='Active')]"
use="ns0:master_plan_no"/>
<xsl:template match="/">
<ns0:accounts>
<xsl:apply-templates select='ns0:accounts'/>
</ns0:accounts>
</xsl:template>
<xsl:template match="ns0:accounts">
<xsl:for-each select="*[starts-with(name(), 'account') and (ns0:status='Active')][count(. | key('acc', ns0:account_no)[1]) = 1]">
<xsl:for-each select="key('acc', ns0:account_no)">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:for-each>
<xsl:for-each select='ns0:accounts/ns0:account'>
<xsl:for-each select="$ReceiveRequest2.part1/ns1:plans/ns1:plan[ns1:account_no=ns0:account_no]">
<xsl:sort select="ns1:dunningStep" order="descending" type="number">
<xsl:if test="position()=1">
<xsl:if test='ns0:dunningStep=.'>
<xsl:copy-of select="ns0:accounts/*"/>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
Пожалуйста, помогите мне с этим и спасибо заранее.