Ниже приведен входной XML в XSLTXSLT преобразование: для каждого
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:sf="urn:sobject.partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header><LimitInfoHeader><limitInfo><current>4930</current><limit>5000000</limit><type>API REQUESTS</type></limitInfo></LimitInfoHeader></soapenv:Header>
<soapenv:Body>
<queryResponse>
<result xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Account</sf:type>
<sf:Id xsi:nil="true"/>
<sf:Contacts xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Contact</sf:type>
<sf:Id>0031700000ThqzkAAB</sf:Id>
<sf:Id>0031700000ThqzkAAB</sf:Id>
</records>
<size>1</size>
</sf:Contacts>
<sf:Opportunities xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Opportunity</sf:type>
<sf:Id>0061700000BB1kRAAT</sf:Id>
<sf:Id>0061700000BB1kRAAT</sf:Id>
</records>
<size>1</size>
</sf:Opportunities>
</records>
***<records xsi:type="sf:sObject">
<sf:type>Account</sf:type>
<sf:Id xsi:nil="true"/>
<sf:Contacts xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Contact</sf:type>
<sf:Id>0031a00000Kdu8zAAB</sf:Id>
<sf:Id>0031a00000Kdu8zAAB</sf:Id>
</records>
<size>1</size>
</sf:Contacts>
<sf:Opportunities xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Opportunity</sf:type>
<sf:Id>0061a00000Ej6JwAAJ</sf:Id>
<sf:Id>0061a00000Ej6JwAAJ</sf:Id>
</records>
<size>1</size>
</sf:Opportunities>
</records>
<records xsi:type="sf:sObject">
<sf:type>Account</sf:type>
<sf:Id xsi:nil="true"/>
<sf:Contacts xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Contact</sf:type>
<sf:Id>0031a00000HcNSDAA3</sf:Id>
<sf:Id>0031a00000HcNSDAA3</sf:Id>
</records>
<size>1</size>
</sf:Contacts>
<sf:Opportunities xsi:type="QueryResult">
<done>true</done>
<queryLocator xsi:nil="true"/>
<records xsi:type="sf:sObject">
<sf:type>Opportunity</sf:type>
<sf:Id>0061a00000Ej6JDAAZ</sf:Id>
<sf:Id>0061a00000Ej6JDAAZ</sf:Id>
</records>
<size>1</size>
</sf:Opportunities>
</records>***
<size>3</size>
</result>
</queryResponse>
</soapenv:Body></soapenv:Envelope>
Ниже приведен код XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="urn:partner.soap.sforce.com"
xmlns:sf="urn:sobject.partner.soap.sforce.com"
xmlns:sfdc="sfdc">
<xsl:template match="/">
<sfdc:sObjects xmlns:sfdc="sfdc" type="OpportunityContactRole">
<xsl:for-each select="//ns:queryResponse/ns:result/ns:records">
<xsl:if test="//ns:records/sf:Contacts/ns:done/text() = 'true' and //ns:records/sf:Opportunities/ns:done/text() = 'true'">
<sfdc:sObject>
<sfdc:ContactId>
<xsl:value-of select="//ns:records/sf:Contacts/ns:records/sf:Id[1]/text()"/>
</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>
<xsl:value-of select="//ns:records/sf:Opportunities/ns:records/sf:Id[1]/text()"/>
</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
</xsl:if>
</xsl:for-each>
</sfdc:sObjects>
</xsl:template>
</xsl:stylesheet>
ниже выход, который я получил
<?xml version="1.0" encoding="utf-8"?>
<sfdc:sObjects xmlns:sfdc="sfdc" xmlns:ns="urn:partner.soap.sforce.com"
xmlns:sf="urn:sobject.partner.soap.sforce.com" type="OpportunityContactRole">
<sfdc:sObject>
<sfdc:ContactId>0031700000ThqzkAAB</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>0061700000BB1kRAAT</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
<sfdc:sObject>
<sfdc:ContactId>0031700000ThqzkAAB</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>0061700000BB1kRAAT</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
<sfdc:sObject>
<sfdc:ContactId>0031700000ThqzkAAB</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>0061700000BB1kRAAT</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
</sfdc:sObjects>
здесь выведенный выше результат, итерация происходит успешно, но считаются только первые значения записей i.e 0031700000ThqzkAAB и 0061700000BB1kRAAT
Почему второе и третье значения записи (выделенные во входном xml) существуют на выходе.? не в состоянии понять.
в целом ниже желаемый результат
<?xml version="1.0" encoding="utf-8"?>
<sfdc:sObjects xmlns:sfdc="sfdc" xmlns:ns="urn:partner.soap.sforce.com"
xmlns:sf="urn:sobject.partner.soap.sforce.com" type="OpportunityContactRole">
<sfdc:sObject>
<sfdc:ContactId>0031700000ThqzkAAB</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>0061700000BB1kRAAT</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
<sfdc:sObject>
<sfdc:ContactId>0031a00000Kdu8zAAB</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>0061a00000Ej6JwAAJ</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
<sfdc:sObject>
<sfdc:ContactId>0031a00000HcNSDAA3</sfdc:ContactId>
<sfdc:IsPrimary>True</sfdc:IsPrimary>
<OpportunityId>0061a00000Ej6JDAAZ</OpportunityId>
<sfdc:Role>Purchaser</sfdc:Role>
</sfdc:sObject>
</sfdc:sObjects>
с просьбой, пожалуйста, помогите мне выход
Спасибо за решение, это сработало для меня – user2587669