-1

xml を操作する xslt の学習を開始し、多くの異なる子ノードと孫ノードを持つ xml をフラット化しようとしています。入力 xml を変換して output.xml を生成する単純な xslt はありますか。

入力.xml:

<Addresses>
  <Address__c>
    <Id>a0H20000002uhsyEAA</Id>
    <R00N20000001XA10EAG>
        <Customer_Installation_Address__c>
            <Id>a0L2000000DDpOCEA1</Id>
        </Customer_Installation_Address__c>
        <Customer_Installation_Address__c>
            <Id>a0L2000000DDpOCEB2</Id>
        </Customer_Installation_Address__c>
    </R00N20000001XA10EAG>
    <Customers__r>
        <Account>
            <Id>001M000000FOEiHIAX</Id>
        </Account>
        <Account>
            <Id>001M000000FOAAbIAP</Id>
        </Account>
    </Customers__r>
    <Cases__r>
        <Case>
            <Id>500D000000G7drpIAB</Id>
        </Case>
    </Cases__r>
   </Address__c>
   <Address__c>
    <Id>a0H20000003JjyzEAC</Id>
    <Cases__r>
        <Case>
            <Id>500D000000G7drpIAB</Id>
        </Case>
    </Cases__r>
   </Address__c>
   <Address__c>
    <Id>a0HD0000007wQ0EMAU</Id>
    <Customers__r>
        <Account>
            <Id>001M000000FOEiHIAX</Id>
        </Account>
        <Account>
            <Id>001M000000FOAAbIAP</Id>
        </Account>
    </Customers__r>
   </Address__c>
</Addresses>

次のxml出力を生成したいと考えています。

output.xml

<Addresses>
  <Address__c>
    <AddrId>a0H20000002uhsyEAA</AddrId>
    <CIAddressId>a0L2000000DDpOCEA1</CIAddressId>
    <CIAddressId>a0L2000000DDpOCEB2</CIAddressId>
    <AccountId>001M000000FOEiHIAX</AccountId>
    <AccountId>001M000000FOAAbIAP</AccountId>
    <CaseId>500D000000G7drpIAB</CaseId>
  </Address__c>
  <Address__c>
    <AddrId>a0H20000003JjyzEAC</AddrId>
    <CaseId>500D000000G7drpIAB</CaseId>
  </Address__c>
  <Address__c>
    <AddrId>a0HD0000007wQ0EMAU</AddrId>
    <AccountId>001M000000FOEiHIAX</AccountId>
    <AccountId>001M000000FOAAbIAP</AccountId>
   </Address__c>
</Addresses>
4

1 に答える 1

1

このようなもの (もっと簡潔な表現方法があります):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Addresses>
      <xsl:apply-templates select="Addresses/Address__c" />
    </Addresses>
  </xsl:template>

  <xsl:template match="Address__c">
    <Address__c>
      <xsl:apply-templates select="descendant::Id" />
    </Address__c>
  </xsl:template>

  <xsl:template match="Id">
    <Id><xsl:value-of select="." /></Id>
  </xsl:template>
</xsl:stylesheet>

あなたに与えるだろう

<Addresses>
<Address__c>
    <Id>a0H20000002uhsyEAA</Id>
    <Id>a0L2000000DDpOCEA1</Id>
    <Id>a0L2000000DDpOCEB2</Id>
    <!-- ... -->

テンプレートを追加Idして、親に応じて要素の名前を変更できるようになりました。

<xsl:template match="Address__c/Id">
  <AddrId><xsl:value-of select="." /></AddrId>
</xsl:template>

<xsl:template match="Customer_Installation_Address__c/Id">
  <CIAddressId><xsl:value-of select="." /></CIAddressId>
</xsl:template>

于 2012-08-10T13:50:17.993 に答える