XSLT v2.0 を使用して、2 つの異なる XML をマージし、XSLT コードを使用して異なる XML 出力を生成する XSLT を作成しようとしています。
以下は私の要件です。
入力 XML1 は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<externalIdFields xmlns="urn:partner.soap.sforce.com/">
<object name="Account">
<ExternalID>
<name>ExtAccountID__c</name>
<type>string</type>
</ExternalID>
</object>
<object name="User"/>
<object name="Contact">
<ExternalID>
<name>ExtContactID__c</name>
<type>string</type>
</ExternalID>
</object>
<object name="Opportunity">
<ExternalID>
<name>ExtOpportunityID__c</name>
<type>decimal</type>
</ExternalID>
<ExternalID>
<name>UniqueAnotherOppID__c</name>
<type>boolean</type>
</ExternalID>
</object>
XML2 は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<relationshipNames>
<object name="Account">
<reletionshipName>Parent</reletionshipName>
</object>
<object name="User">
<reletionshipName>Owner</reletionshipName>
</object>
<object name="Contact">
<reletionshipName>LookUpContact__r</reletionshipName>
</object>
<object name="Opportunity">
<reletionshipName>LookUpOpportunity__r</reletionshipName>
</object>
<object name="Opportunity">
<reletionshipName>AnotherRelationship__r</reletionshipName>
</object>
</relationshipNames>
最初の XML には各オブジェクトのすべての外部 ID が含まれ、2 番目の XML には各オブジェクトのすべての関係名が含まれます。
出力 XML は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<result xmlns:con = "http://www.approuter.com/schemas/cdk/config/">
<con:field name = "Parent.ExtAccountID__c" label = "Parent.ExtAccountID__c">
<con:type>string</con:type>
</con:field>
<con:field name = "LookUpContact__r.ExtContactID__c" label="LookUpContact__r.ExtContactID__c">
<con:type>string</con:type>
</con:field>
<con:field name = "LookUpOpportunity__r.ExtOpportunityID__c" label = "LookUpOpportunity__r.ExtOpportunityID__c">
<con:type>decimal</con:type>
</con:field>
<con:field name = "LookUpOpportunity__r.UniqueAnotherOppID__c." label = "LookUpOpportunity__r.UniqueAnotherOppID__c">
<con:type>boolean</con:type>
</con:field>
<con:field name = "AnotherRelationship__r.ExtOpportunityID__c." label = "AnotherRelationship__r.ExtOpportunityID__c">
<con:type>boolean</con:type>
</con:field>
<con:field name = "AnotherRelationship__r.UniqueAnotherOppID__c." label = "AnotherRelationship__r.UniqueAnotherOppID__c">
<con:type>boolean</con:type>
</con:field>
</result>
マージは簡単です。各オブジェクトの各 externalId に対して、con:field タグを作成します。ここで、name と label の値は、そのオブジェクトと externalId フィールド名の対応する relationshipName である必要があります。関係名.externalIdFieldName となります。オブジェクトの relationshipName は、そのオブジェクトのみの externalIds に関連付ける必要があります。
どうすればこれを達成できますか? 2 つの XML をマージする XSLT を見ました。しかし、別の例の「@* | node()」の部分がわかりませんでした。ここでは、2 つの完全に異なる XML を解析する例は見つかりませんでした。
あなたの助けに感謝。