使用XSLT遍历递归XML子节点

时间:2017-03-08 14:41:07

标签: xml xslt

我在Node FamilyTreeMemberOrganization的输出中只获得了一个单一级别的数据,但是存在层次结构。我可以做些什么来从所有层次结构中获取数据。

要遍历的XML

<OrderProductResponseDetail>
        <InquiryDetail>
           <DUNSNumber>310661827</DUNSNumber>
           <CountryISOAlpha2Code>DK</CountryISOAlpha2Code>
        </InquiryDetail>
        <Product>
           <DNBProductID>LNK_UPF</DNBProductID>
           <LinkageResponseOrganizationCount>5</LinkageResponseOrganizationCount>
           <Organization>
              <SubjectHeader>
                 <DUNSNumber>311011832</DUNSNumber>
              </SubjectHeader>
              <Location>
                 <PrimaryAddress>
                    <StreetAddressLine>
                       <LineText>Langelinie Allé 35, c/o Bech-Bruun</LineText>
                    </StreetAddressLine>
                    <PrimaryTownName>COPENHAGEN</PrimaryTownName>
                    <CountryISOAlpha2Code>DK</CountryISOAlpha2Code>
                    <PostalCode>2100</PostalCode>
                 </PrimaryAddress>
              </Location>
              <OrganizationName>
                 <OrganizationPrimaryName>
                    <OrganizationName>Ld Equity 3 K/S</OrganizationName>
                 </OrganizationPrimaryName>
              </OrganizationName>
              <OrganizationDetail>
                 <FamilyTreeMemberRole>
                    <FamilyTreeMemberRoleText>Parent</FamilyTreeMemberRoleText>
                 </FamilyTreeMemberRole>
                 <StandaloneOrganizationIndicator>false</StandaloneOrganizationIndicator>
              </OrganizationDetail>
              <Linkage>
                 <LinkageSummary>
                    <ChildrenSummary>
                       <ChildrenQuantity>33</ChildrenQuantity>
                       <DirectChildrenIndicator>false</DirectChildrenIndicator>
                    </ChildrenSummary>
                    <ChildrenSummary>
                       <ChildrenTypeText>Subsidiary</ChildrenTypeText>
                       <ChildrenQuantity>8</ChildrenQuantity>
                       <DirectChildrenIndicator>true</DirectChildrenIndicator>
                    </ChildrenSummary>
                 </LinkageSummary>
                 <GlobalUltimateOrganization>
                    <DUNSNumber>311011832</DUNSNumber>
                 </GlobalUltimateOrganization>
                 <DomesticUltimateOrganization>
                    <DUNSNumber>311011832</DUNSNumber>
                 </DomesticUltimateOrganization>
                 <FamilyTreeMemberOrganization>
                    <AssociationTypeText>ParentSubsidiary</AssociationTypeText>
                    <OrganizationName>
                       <OrganizationPrimaryName>
                          <OrganizationName>Ldetre Holding 3 ApS</OrganizationName>
                       </OrganizationPrimaryName>
                    </OrganizationName>
                    <SubjectHeader>
                       <DUNSNumber>311634864</DUNSNumber>
                    </SubjectHeader>
                    <Location>
                       <PrimaryAddress>
                          <StreetAddressLine>
                             <LineText>Gammeltorv 18</LineText>
                          </StreetAddressLine>
                          <PrimaryTownName>COPENHAGEN</PrimaryTownName>
                          <CountryISOAlpha2Code>DK</CountryISOAlpha2Code>
                          <PostalCode>1457</PostalCode>
                       </PrimaryAddress>
                    </Location>
                    <OrganizationDetail>
                       <FamilyTreeMemberRole>
                          <FamilyTreeMemberRoleText>Subsidiary</FamilyTreeMemberRoleText>
                       </FamilyTreeMemberRole>
                       <FamilyTreeMemberRole>
                          <FamilyTreeMemberRoleText>Parent</FamilyTreeMemberRoleText>
                       </FamilyTreeMemberRole>
                       <StandaloneOrganizationIndicator>false</StandaloneOrganizationIndicator>
                    </OrganizationDetail>
                    <Linkage>
                       <LinkageSummary>
                          <ChildrenSummary>
                             <ChildrenQuantity>12</ChildrenQuantity>
                             <DirectChildrenIndicator>false</DirectChildrenIndicator>
                          </ChildrenSummary>
                          <ChildrenSummary>
                             <ChildrenTypeText>Affiliate</ChildrenTypeText>
                             <ChildrenQuantity>7</ChildrenQuantity>
                             <DirectChildrenIndicator>false</DirectChildrenIndicator>
                          </ChildrenSummary>
                          <ChildrenSummary>
                             <ChildrenTypeText>Subsidiary</ChildrenTypeText>
                             <ChildrenQuantity>1</ChildrenQuantity>
                             <DirectChildrenIndicator>true</DirectChildrenIndicator>
                          </ChildrenSummary>
                          <SiblingCount>7</SiblingCount>
                       </LinkageSummary>
                       <GlobalUltimateOrganization>
                          <DUNSNumber>311011832</DUNSNumber>
                       </GlobalUltimateOrganization>
                       <DomesticUltimateOrganization>
                          <DUNSNumber>311011832</DUNSNumber>
                       </DomesticUltimateOrganization>
                       <ParentOrganization>
                          <DUNSNumber>311011832</DUNSNumber>
                       </ParentOrganization>
                       <FamilyTreeMemberOrganization>
                          <AssociationTypeText>ParentSubsidiary</AssociationTypeText>
                          <OrganizationName>
                             <OrganizationPrimaryName>
                                <OrganizationName>Ldetre Datterholding 3 ApS</OrganizationName>
                             </OrganizationPrimaryName>
                          </OrganizationName>
                          <SubjectHeader>
                             <DUNSNumber>311634450</DUNSNumber>
                          </SubjectHeader>
                          <Location>
                             <PrimaryAddress>
                                <StreetAddressLine>
                                   <LineText>Gammeltorv 18</LineText>
                                </StreetAddressLine>
                                <PrimaryTownName>COPENHAGEN</PrimaryTownName>
                                <CountryISOAlpha2Code>DK</CountryISOAlpha2Code>
                                <PostalCode>1457</PostalCode>
                             </PrimaryAddress>
                          </Location>
                          <OrganizationDetail>
                             <FamilyTreeMemberRole>
                                <FamilyTreeMemberRoleText>Subsidiary</FamilyTreeMemberRoleText>
                             </FamilyTreeMemberRole>
                             <FamilyTreeMemberRole>
                                <FamilyTreeMemberRoleText>Parent</FamilyTreeMemberRoleText>
                             </FamilyTreeMemberRole>
                             <StandaloneOrganizationIndicator>false</StandaloneOrganizationIndicator>
                          </OrganizationDetail>
                          <Linkage>
                             <LinkageSummary>
                                <ChildrenSummary>
                                   <ChildrenQuantity>11</ChildrenQuantity>
                                   <DirectChildrenIndicator>false</DirectChildrenIndicator>
                                </ChildrenSummary>
                                <ChildrenSummary>
                                   <ChildrenTypeText>Subsidiary</ChildrenTypeText>
                                   <ChildrenQuantity>1</ChildrenQuantity>
                                   <DirectChildrenIndicator>true</DirectChildrenIndicator>
                                </ChildrenSummary>
                             </LinkageSummary>
                             <GlobalUltimateOrganization>
                                <DUNSNumber>311011832</DUNSNumber>
                             </GlobalUltimateOrganization>
                             <DomesticUltimateOrganization>
                                <DUNSNumber>311011832</DUNSNumber>
                             </DomesticUltimateOrganization>
                             <ParentOrganization>
                                <DUNSNumber>311634864</DUNSNumber>
                             </ParentOrganization>
                             <FamilyTreeMemberOrganization>
                                <AssociationTypeText>ParentSubsidiary</AssociationTypeText>
                                <OrganizationName>
                                   <OrganizationPrimaryName>
                                      <OrganizationName>Solum A/S</OrganizationName>
                                   </OrganizationPrimaryName>
                                   <TradeStyleName>
                                      <OrganizationName>Davregårdens Planteskole A/S</OrganizationName>
                                   </TradeStyleName>
                                   <TradeStyleName>
                                      <OrganizationName>Dansk Jordforbedring A/S</OrganizationName>
                                   </TradeStyleName>
                                </OrganizationName>
                                <SubjectHeader>
                                   <DUNSNumber>305020638</DUNSNumber>
                                </SubjectHeader>
                                <Location>
                                   <PrimaryAddress>
                                      <StreetAddressLine>
                                         <LineText>Vadsbystræde 6</LineText>
                                      </StreetAddressLine>
                                      <PrimaryTownName>HEDEHUSENE</PrimaryTownName>
                                      <CountryISOAlpha2Code>DK</CountryISOAlpha2Code>
                                      <PostalCode>2640</PostalCode>
                                   </PrimaryAddress>
                                </Location>
                                <OrganizationDetail>
                                   <FamilyTreeMemberRole>
                                      <FamilyTreeMemberRoleText>Subsidiary</FamilyTreeMemberRoleText>
                                   </FamilyTreeMemberRole>
                                   <FamilyTreeMemberRole>
                                      <FamilyTreeMemberRoleText>Parent</FamilyTreeMemberRoleText>
                                   </FamilyTreeMemberRole>
                                   <StandaloneOrganizationIndicator>false</StandaloneOrganizationIndicator>
                                </OrganizationDetail>
                                <Linkage>
                                   <LinkageSummary>
                                      <ChildrenSummary>
                                         <ChildrenQuantity>10</ChildrenQuantity>
                                         <DirectChildrenIndicator>false</DirectChildrenIndicator>
                                      </ChildrenSummary>
                                      <ChildrenSummary>
                                         <ChildrenTypeText>Subsidiary</ChildrenTypeText>
                                         <ChildrenQuantity>4</ChildrenQuantity>
                                         <DirectChildrenIndicator>true</DirectChildrenIndicator>
                                      </ChildrenSummary>
                                   </LinkageSummary>
                                   <GlobalUltimateOrganization>
                                      <DUNSNumber>311011832</DUNSNumber>
                                   </GlobalUltimateOrganization>
                                   <DomesticUltimateOrganization>
                                      <DUNSNumber>311011832</DUNSNumber>
                                   </DomesticUltimateOrganization>
                                   <ParentOrganization>
                                      <DUNSNumber>311634450</DUNSNumber>
                                   </ParentOrganization>
                                   <FamilyTreeMemberOrganization>
                                      <AssociationTypeText>ParentSubsidiary</AssociationTypeText>
                                      <OrganizationName>
                                         <OrganizationPrimaryName>
                                            <OrganizationName>Aikan A/S</OrganizationName>
                                         </OrganizationPrimaryName>
                                      </OrganizationName>
                                      <SubjectHeader>
                                         <DUNSNumber>310661827</DUNSNumber>
                                      </SubjectHeader>
                                      <Location>
                                         <PrimaryAddress>
                                            <StreetAddressLine>
                                               <LineText>Vadsbystræde 6, c/o Solum A/S</LineText>
                                            </StreetAddressLine>
                                            <PrimaryTownName>HEDEHUSENE</PrimaryTownName>
                                            <CountryISOAlpha2Code>DK</CountryISOAlpha2Code>
                                            <PostalCode>2640</PostalCode>
                                         </PrimaryAddress>
                                      </Location>
                                      <OrganizationDetail>
                                         <FamilyTreeMemberRole>
                                            <FamilyTreeMemberRoleText>Subsidiary</FamilyTreeMemberRoleText>
                                         </FamilyTreeMemberRole>
                                         <FamilyTreeMemberRole>
                                            <FamilyTreeMemberRoleText>Parent</FamilyTreeMemberRoleText>
                                         </FamilyTreeMemberRole>
                                         <StandaloneOrganizationIndicator>false</StandaloneOrganizationIndicator>
                                      </OrganizationDetail>
                                      <Linkage>
                                         <LinkageSummary>
                                            <ChildrenSummary>
                                               <ChildrenQuantity>2</ChildrenQuantity>
                                               <DirectChildrenIndicator>false</DirectChildrenIndicator>
                                            </ChildrenSummary>
                                            <ChildrenSummary>
                                               <ChildrenTypeText>Affiliate</ChildrenTypeText>
                                               <ChildrenQuantity>3</ChildrenQuantity>
                                               <DirectChildrenIndicator>false</DirectChildrenIndicator>
                                            </ChildrenSummary>
                                            <ChildrenSummary>
                                               <ChildrenTypeText>Subsidiary</ChildrenTypeText>
                                               <ChildrenQuantity>2</ChildrenQuantity>
                                               <DirectChildrenIndicator>true</DirectChildrenIndicator>
                                            </ChildrenSummary>
                                            <SiblingCount>3</SiblingCount>
                                         </LinkageSummary>
                                         <GlobalUltimateOrganization>
                                            <DUNSNumber>311011832</DUNSNumber>
                                         </GlobalUltimateOrganization>
                                         <DomesticUltimateOrganization>
                                            <DUNSNumber>311011832</DUNSNumber>
                                         </DomesticUltimateOrganization>
                                         <ParentOrganization>
                                            <DUNSNumber>305020638</DUNSNumber>
                                         </ParentOrganization>
                                         <FamilyTreeHierarchyLevel>5</FamilyTreeHierarchyLevel>
                                      </Linkage>
                                   </FamilyTreeMemberOrganization>
                                   <FamilyTreeHierarchyLevel>4</FamilyTreeHierarchyLevel>
                                </Linkage>
                             </FamilyTreeMemberOrganization>
                             <FamilyTreeHierarchyLevel>3</FamilyTreeHierarchyLevel>
                          </Linkage>
                       </FamilyTreeMemberOrganization>
                       <FamilyTreeHierarchyLevel>2</FamilyTreeHierarchyLevel>
                    </Linkage>
                 </FamilyTreeMemberOrganization>
                 <FamilyTreeHierarchyLevel>1</FamilyTreeHierarchyLevel>
              </Linkage>
           </Organization>
        </Product>
     </OrderProductResponseDetail>

XSLT

<xsl:template match="Organization | FamilyTreeMemberOrganization">
    <xsl:apply-templates select="SubjectHeader"/>

    <AssociationType>
        <xsl:value-of select="AssociationTypeText"/>
    </AssociationType>

    <xsl:apply-templates select="Linkage"/>

    <xsl:apply-templates select="OrganizationName"/>

    <xsl:apply-templates select="OrganizationDetail"/>

    <xsl:apply-templates select="Location/PrimaryAddress"/>

</xsl:template>



<xsl:template match="SubjectHeader">
    <DUNSNumber>
        <xsl:value-of select="DUNSNumber"/>
    </DUNSNumber>

    <MarketabilityIndicator>
        <xsl:value-of select="MarketabilityIndicator"/>
    </MarketabilityIndicator>

    <SubjectHandlingText>
        <xsl:value-of select="SubjectHandling/SubjectHandlingText"/>
    </SubjectHandlingText>
</xsl:template>

<xsl:template match="Linkage">
    <GlobalUltimateDUNSNumber>
        <xsl:value-of select="GlobalUltimateOrganization/DUNSNumber"/>
    </GlobalUltimateDUNSNumber>

    <DomesticUltimateDUNSNumber>
        <xsl:value-of select="DomesticUltimateOrganization/DUNSNumber"/>
    </DomesticUltimateDUNSNumber>

    <HeadquartersDUNSNumber>
        <xsl:value-of select="HeadquartersOrganization/DUNSNumber"/>
    </HeadquartersDUNSNumber>

    <ParentDUNSNumber>
        <xsl:value-of select="ParentOrganization/DUNSNumber"/>
    </ParentDUNSNumber>

    <FamilyTreeHierarchyLevel>
        <xsl:value-of select="FamilyTreeHierarchyLevel"/>
    </FamilyTreeHierarchyLevel>

    <SiblingCount>
        <xsl:value-of select="LinkageSummary/SiblingCount"/>
    </SiblingCount>

    <DirectChildrenIndicator>
        <xsl:value-of select="LinkageSummary/ChildrenSummary/DirectChildrenIndicator"/>
    </DirectChildrenIndicator>

    <ChildrenQuantity>
        <xsl:value-of select="LinkageSummary/ChildrenSummary/ChildrenQuantity"/>
    </ChildrenQuantity>
</xsl:template>

<xsl:template match="OrganizationName">
    <OrganizationName>
        <xsl:value-of select="OrganizationPrimaryName/OrganizationName"/>
    </OrganizationName>

    <TradeStyleName1>
        <xsl:value-of select="TradeStyleName[1]/OrganizationName"/>
    </TradeStyleName1>

    <TradeStyleName2>
        <xsl:value-of select="TradeStyleName[2]/OrganizationName"/>
    </TradeStyleName2>

    <TradeStyleName3>
        <xsl:value-of select="TradeStyleName[3]/OrganizationName"/>
    </TradeStyleName3>

    <TradeStyleName4>
        <xsl:value-of select="TradeStyleName[4]/OrganizationName"/>
    </TradeStyleName4>

    <TradeStyleName5>
        <xsl:value-of select="TradeStyleName[5]/OrganizationName"/>
    </TradeStyleName5>
</xsl:template>

<xsl:template match="OrganizationDetail">
    <FamilyTreeMemberRole>
        <xsl:value-of select="FamilyTreeMemberRole/FamilyTreeMemberRoleText"/>
    </FamilyTreeMemberRole>

    <StandaloneOrganizationIndicator>
        <xsl:value-of select="StandaloneOrganizationIndicator"/>
    </StandaloneOrganizationIndicator>
</xsl:template>

<xsl:template match="PrimaryAddress">
    <PrimaryStreetAddressLine1>
        <xsl:value-of select="StreetAddressLine[1]/LineText"/>
    </PrimaryStreetAddressLine1>

    <PrimaryStreetAddressLine2>
        <xsl:value-of select="StreetAddressLine[2]/LineText"/>
    </PrimaryStreetAddressLine2>

    <PrimaryTownName>
        <xsl:value-of select="PrimaryTownName"/>
    </PrimaryTownName>

    <PrimaryPostalCode>
        <xsl:value-of select="PostalCode"/>
    </PrimaryPostalCode>

    <PrimaryCountyName>
        <xsl:value-of select="CountyOfficialName"/>
    </PrimaryCountyName>

    <PrimaryTerritoryName>
        <xsl:value-of select="TerritoryOfficialName"/>
    </PrimaryTerritoryName>

    <PrimaryTerritoryAbbreviatedName>
        <xsl:value-of select="TerritoryAbbreviatedName"/>
    </PrimaryTerritoryAbbreviatedName>

    <PrimaryCountryISOAlpha2Code>
        <xsl:value-of select="CountryISOAlpha2Code"/>
    </PrimaryCountryISOAlpha2Code>

    <PrimaryUndeliverableIndicator>
        <xsl:value-of select="UndeliverableIndicator"/>
    </PrimaryUndeliverableIndicator>
</xsl:template>

0 个答案:

没有答案