0

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 を解析する例は見つかりませんでした。

あなたの助けに感謝。

4

1 に答える 1