У меня есть XML-файл, который содержит значение столбца, мне нужно передать это как параметр в мой оператор xsl foreach. Ниже моя реализация, но я не получаю желаемого результата:Назначение переменной в инструкции XSL FO foreach
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>
В XML, GroupingColumn1 может содержать любое значение, которое я должен передайте его на мой 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>
В приведенной выше таблице, я жёстко имя столбца как LoginID, вместо того, что я хочу передать имя переменной и для создания таблицы. Я могу напечатать переменную GroupingColumn, но не знаю, почему она не печатает результат.
Вы XSL не имеет смысла против вашего входного XML. Не пытайтесь отрезать его и подумать, что мы можем понять. Пример: у вашего XSL есть xpath/PdfPrinter/Reports/Header/GroupingColumn1, который не существует нигде в вашем XML, чтобы он ничего не возвращал. Невозможно диагностировать ваша проблема с конкурирующей информацией. –
@KevinBrown: Я реализую группу уровня 1 на основе значения GroupingColumn1 в XML, я должен передать значение GroupingColumn1 в свой XSL, как показано в приведенном выше фрагменте. Я думаю, что это просто назначение переменной, при необходимости я опубликую полный XSLT. Пожалуйста, порекомендуйте. Спасибо. –
Любая помощь с благодарностью .. –