2017-07-12 6 views
0

Ich muss Daten dynamisch aus einer XML-Datei mit XSLT ausgeben. Wir haben ein paar verschiedene Datenstrukturen und anstatt jeden Abschnitt explizit durchlaufen zu müssen, habe ich mich gefragt, ob es einen Weg gibt, dies in einem Block zu tun. Dies ist ein Beispiel für die XML werde ich erhalten:XML-Struktur mit XSLT ausgeben

 <IntermediaryInfo> 
      <PersonalInformation> 
       <Title>str1234</Title> 
       <FirstName>str1234</FirstName> 
       <Surname>str1234</Surname> 
       <DateofBirth>2012-12-13</DateofBirth> 
       <WorkTelephoneNumber>str1234</WorkTelephoneNumber> 
      </PersonalInformation> 
      <CompanyInformation> 
       <CompanyName>str1234</CompanyName> 
       <CompanyFCANumber>str1234</CompanyFCANumber> 
      </CompanyInformation> 
      <CompanyAddress> 
       <PostCode>str1234</PostCode> 
       <HouseNumber>str1234</HouseNumber> 
       <HouseName>str1234</HouseName> 
       <AddressLine1>str1234</AddressLine1> 
       <AddressLine2>str1234</AddressLine2> 
      </CompanyAddress> 
      <CompanyPermissionLevels> 
       <AdvisingonConsumer>str1234</AdvisingonConsumer> 
       <ArrangingConsumerBuytoLetmortgageContracts>str1234</ArrangingConsumerBuytoLetmortgageContracts> 
      </CompanyPermissionLevels> 
      <PrincipleFirm> 
       <FirmName>str1234</FirmName> 
       <FirmFCANumber>123</FirmFCANumber> 
      </PrincipleFirm> 
      <LendingPartner>str1234</LendingPartner> 
     </IntermediaryInfo> 

Gibt es eine Möglichkeit, um eine Schleife durch jeden Knoten und gibt die Knotennamen und den Wert mit Hilfe von XSLT? So würde es ungefähr so ​​aussehen:

PersonalInformation 
    ------------------- 
    Title: str1234 
    FirstName: str1234 
    Surname: str1234 
    DateofBirth: 2012-12-13 
    WorkTelephoneNumber: str1234 

    CompanyInformation 
    ------------------ 
    CompanyName: str1234 
    CompanyFCANumber: str1234 

Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

+0

Sie müssen bestimmte Regeln für eine solche Transformation bereitstellen. Wie sollte zum Beispiel "LendingPartner" in der Ausgabe dargestellt werden? Was ist, wenn es andere Abschnitte gibt, die eine tiefere Hierarchie als die hier gezeigte haben? –

+1

Produzieren Sie formatierte PDFs mit XSL-FO oder produzieren Sie nur Text? Wenn nur Text vorhanden ist, muss das Tag "xsl-fo" nicht angewendet werden. –

+0

Es gibt keine tiefere Hierarchie und LendingPartner würde genauso ausgegeben wie LendingPartner: str1234. Es ist nur Text, Entschuldigung, ich werde das xsl-fo-Tag entfernen. –

Antwort

0

Hier ist etwas, das Sie als Ausgangspunkt verwenden:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="UTF-8" /> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*"> 
    <xsl:param name="indent"/> 
    <xsl:value-of select="$indent" /> 
    <xsl:value-of select="name()" /> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:apply-templates> 
     <xsl:with-param name="indent" select="concat($indent, '&#9;')"/> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="*[text()]"> 
    <xsl:param name="indent"/> 
    <xsl:value-of select="$indent" /> 
    <xsl:value-of select="name()" /> 
    <xsl:text>: </xsl:text> 
    <xsl:value-of select="." /> 
    <xsl:text>&#10;</xsl:text> 
</xsl:template> 

</xsl:stylesheet> 

Angewandt auf Ihre Eingabe Beispiel wird das Ergebnis sein:

IntermediaryInfo 
    PersonalInformation 
     Title: str1234 
     FirstName: str1234 
     Surname: str1234 
     DateofBirth: 2012-12-13 
     WorkTelephoneNumber: str1234 
    CompanyInformation 
     CompanyName: str1234 
     CompanyFCANumber: str1234 
    CompanyAddress 
     PostCode: str1234 
     HouseNumber: str1234 
     HouseName: str1234 
     AddressLine1: str1234 
     AddressLine2: str1234 
    CompanyPermissionLevels 
     AdvisingonConsumer: str1234 
     ArrangingConsumerBuytoLetmortgageContracts: str1234 
    PrincipleFirm 
     FirmName: str1234 
     FirmFCANumber: 123 
    LendingPartner: str1234