Ich habe eine XML-Datei, die den Wert einer Spalte enthält, muss ich als Parameter an meine xsl foreach-Anweisung übergeben. Im Folgenden finden Sie meine Implementierung, aber ich bin nicht das gewünschte Ergebnis zu erzielen:Zuweisen einer Variablen in XSL FO foreach Anweisung
XML
<PdfPrinter>
<Reports>
<Report>
<CreatedDate>2015-10-07T18:07:45</CreatedDate>
<LogType>ChangePassword</LogType>
<LoginID>ADMIN</LoginID>
<Name>XYZ</Name>
<AppVersion></AppVersion>
<System>OS</System>
<UserIPAddress>192.168.1.83</UserIPAddress>
<LoginDate />
<LogoutDate />
<Remarks></Remarks>
</Report>
<Report>
<CreatedDate>2015-10-07T18:09:54</CreatedDate>
<LogType>ChangePassword</LogType>
<LoginID>SUPERADMIN</LoginID>
<Name>ABC</Name>
<AppVersion></AppVersion>
<System>OS</System>
<UserIPAddress>192.168.1.83</UserIPAddress>
<LoginDate />
<LogoutDate />
<Remarks></Remarks>
</Report>
<Header>
<ReportID>AUD002</ReportID>
<GroupingColumn1>LoginID</GroupingColumn1>
<PrintedBy>SOS</PrintedBy>
<PrintedDate>2016-07-22T11:53:59.8826074Z</PrintedDate>
</Header>
</Reports>
</PdfPrinter>
XSLT
//variable declaration
<xsl:key name="Report" match="Report" use="$GroupingColumn" />
<xsl:variable name="GroupingColumn">
<xsl:value-of select="/PdfPrinter/Reports/Header/GroupingColumn1" />
</xsl:variable>
//Usage of the assigned variable
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*[local-name() !='$GroupingColumn']">
<fo:table-column column-width="proportional-column-width(4.77)"/>
</xsl:for-each>
Im XML, einen beliebigen Wert sollte I, die GroupingColumn1 kann Übergeben Sie es an meine XSL foreach.
**My XSL TABLE**
<fo:table border-bottom-width="5pt"
width="1200pt" border-bottom-color="rgb(0,51,102)">
<!--table header-->
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*[local-name() != 'LoginID']">
<fo:table-column column-width="proportional-column-width(4.77)"/>
</xsl:for-each>
<fo:table-header>
<fo:table-row height="20.81pt" display-align="center" overflow="hidden">
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*[local-name() != 'LoginID']">
<fo:table-cell text-align="center" border="rgb(0, 0, 0) solid 1pt" padding="2pt">
<fo:block color="rgb(0,0,0)" text-align="center" font-weight="normal">
<xsl:value-of select="name()"/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</fo:table-header>
<!--table body-->
<fo:table-body>
<xsl:for-each
select="PdfPrinter/Reports/Report[generate-id() = generate-id(key('Report', LoginID)[1])]">
<fo:table-row>
<fo:table-cell number-columns-spanned="{count(*) - 1}">
<fo:block><xsl:apply-templates select="LoginID" /></fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="key('Report', LoginID)">
<fo:table-row display-align="before">
<xsl:for-each select="*[local-name() != 'LoginID']">
<fo:table-cell text-align="center"
border-top-color="rgb(0, 0, 0)"
border-top-style="solid" border-width="1pt" padding="2pt">
<fo:block>
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</xsl:for-each>
</fo:table-body>
</fo:table>
In der obigen Tabelle habe ich die Spaltennamen als LoginID fest einprogrammiert, statt dass ich mag die Variablennamen übergeben und die Tabelle zu erstellen. Ich kann die GroupingColumn-Variable drucken, weiß aber nicht, warum die Ausgabe nicht gedruckt wird.
Sie XSL macht keinen Sinn, gegen Ihre Eingabe XML. Versuchen Sie nicht, es zu schnippen und zu denken, dass wir es verstehen können. Beispiel: Ihr XSL hat einen Xpath "/ PdfPrinter/Reports/Header/GroupingColumn1", der nirgendwo in Ihrem XML existiert, so dass es nichts zurückgeben würde. Es gibt keine Möglichkeit zu diagnostizieren Ihr Problem mit konkurrierenden Informationen. –
@KevinBrown: Ich bin Level-1-Gruppierung basierend auf dem GroupingColumn1-Wert in der XML implementiert, ich sollte in der Lage sein, den GroupingColumn1-Wert an meine XSL übergeben, wie im obigen Snippet gezeigt. Ich denke, das ist nur eine variable Zuweisung, falls erforderlich werde ich die volle XSLT posten. Bitte beraten. Vielen Dank. –
Jede Hilfe wird sehr geschätzt .. –