在 XSLT 1.0 中去除 XML 元素和命名空间之间的编码值
Strip encoded values between XML elements and namespaces in XSLT 1.0
我有一个 XML,在 XML 个元素之间有空格。我正在使用 XSLT 1.0 模板将其转换为 XSL FO 以打印 pdf 报告。我想解码 XSLT 中的值以在 PDF.Below 中打印是我的 XML 和 XSLT 1.0。谁能指导我解码 XML 元素之间的值?
XML
<PdfPrinter>
<Reports>
<Report>
<BranchID>SA-02</BranchID>
<Trade_x0020_Date>2016-08-10T00:00:00</Trade_x0020_Date>
<Account_x0020_No>ABCDE01384</Account_x0020_No>
<CParty_x0020_ID/>
<Reference_x0020_No>TS-N-203-001</Reference_x0020_No>
<Source>N</Source>
<CDS_x0020_No>0000001387</CDS_x0020_No>
<Dealer_x0020_ID>1D01</Dealer_x0020_ID>
<Stock_x0020_ID>0400GA</Stock_x0020_ID>
<Price>0.123000</Price>
<Quantity>-1200</Quantity>
<Currency xmlns="Traded">USD</Currency>
<Nett_x0020_Amount xmlns="Traded">-86.600000</Nett_x0020_Amount>
<Currency xmlns="Local">USD</Currency>
<Nett_x0020_Amount xmlns="Local">-86.600000</Nett_x0020_Amount>
<Promo_x0020_Ind>N</Promo_x0020_Ind>
<Charge_x0020_ID xmlns="Brokerage">BRK-N</Charge_x0020_ID>
<Amount xmlns="Brokerage">50.000000</Amount>
<Charge_x0020_ID>CLR</Charge_x0020_ID>
<Amount xmlns="ClearingFee">10.000000</Amount>
<Charge_x0020_ID xmlns="ClearingFee">SDC</Charge_x0020_ID>
<Amount xmlns="StampDuty">1.000000</Amount>
<Charge_x0020_ID xmlns="StampDuty"/>
<Charge_x0020_ID xmlns="Penalty">0</Charge_x0020_ID>
<Amount xmlns="Penalty">0.000000</Amount>
<Tax_x0020_Amount>0.000000</Tax_x0020_Amount>
</Report>
</Reports>
</PdfPrinter>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ext="http://exslt.org/common"
xmlns:utilityExtension="pdfprinter:extensions:utility"
exclude-result-prefixes="msxsl utilityExtension">
<xsl:output method="xml" indent="yes"
omit-xml-declaration="yes" encoding="utf-8"/>
<xsl:template match="/">
<xsl:variable name="Brokerage">Brokerage</xsl:variable>
<xsl:variable name="ClearingFee">Clearing Fee</xsl:variable>
<xsl:variable name="StampDuty">Stamp Duty</xsl:variable>
<xsl:variable name="Penalty">Penalty</xsl:variable>
<xsl:variable name="OtherCharges">Other Charges</xsl:variable>
<xsl:variable name="columnFontSize">12pt</xsl:variable>
<xsl:variable name="columnFontType">Helvetica</xsl:variable>
<xsl:variable name="headerOrgName">Pn</xsl:variable>
<xsl:variable name="headerPrintedBy">Printed By</xsl:variable>
<xsl:variable name="headerPrintedDate">Printed Date</xsl:variable>
<xsl:variable name="headerReportID">Report ID</xsl:variable>
<xsl:variable name="headerLogo" select
="utilityExtension:MapPath('~/App_Data/Resources/IMAGES/logo.jpg')"/>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- defines the layout master -->
<fo:layout-master-set>
<fo:simple-page-master master-name="all-pages" page-width="894mm" page-height="1300pt" margin-top="10mm" margin-left="20mm" margin-right="20mm" margin-bottom="10mm">
<fo:region-body region-name="xsl-region-body" column-gap="0in" margin="0.8in" margin-left="0.7in" margin-top="2.3in" margin-bottom="1.8in" padding-top="0in"/>
<fo:region-before region-name="xsl-region-before" extent="75mm" />
<fo:region-after region-name="xsl-region-after" extent="7in"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="default-sequence">
<fo:single-page-master-reference master-reference="all-pages"/>
<fo:repeatable-page-master-reference master-reference="all-pages" />
</fo:page-sequence-master>
</fo:layout-master-set>
<!-- starts actual layout -->
<fo:page-sequence master-reference="default-sequence" initial-page-number="1" id="last-page">
<fo:static-content flow-name="xsl-region-before" width="100%" border-top-style="solid" border-top-color="rgb(192,192,192)" padding-top="1pt">
<fo:block>
<fo:table border-collapse="collapse" width="100%" table-layout="fixed" margin-top="-0.002in" padding-left="0.7in" margin-left="0in" border-spacing="5px" space-before.conditionality="retain" space-after.conditionality="retain" space-after="1em" space-before="1em">
<fo:table-column column-width="proportional-column-width(55)" column-number="1"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="2"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="3"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="4"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="5"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell width="50%" text-align="left" padding-left="2pt">
<fo:block color="rgb(0,0,128)" font-size="16pt" font-weight="bold"> </fo:block>
<fo:block color="rgb(0,0,128)" font-weight="bold"></fo:block>
<fo:block padding-left="0in">
<fo:external-graphic src="{$headerLogo}"/>    
<fo:block>
</fo:block>
</fo:block>
<fo:block color="rgb(0,0,128)" font-weight="bold">    </fo:block>
<fo:block color="rgb(0,0,0)" font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
<xsl:value-of select="$headerReportID"/> : <xsl:value-of select="/PdfPrinter/Reports/Header/ReportID" />
</fo:block>
</fo:table-cell>
<fo:table-cell></fo:table-cell>
<fo:table-cell></fo:table-cell>
<fo:table-cell></fo:table-cell>
<fo:table-cell width="100%" text-align="left">
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block text-align="left">
<fo:inline font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page"/>
</fo:inline>
</fo:block>
<fo:block text-align="left">
<fo:inline font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
<xsl:value-of select="$headerPrintedBy"/> : <xsl:value-of select="/PdfPrinter/Reports/Report/BrkChgID[(count(current()/preceding-sibling::*)+1)]/@id"/>
</fo:inline>
</fo:block>
<fo:block text-align="left">
<fo:inline font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
<xsl:value-of select="$headerPrintedDate"/> : <xsl:value-of select="/PdfPrinter/Reports/Header/PrintedDate" />
</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:block/>
</fo:block>
<fo:block text-align="center">
<fo:table padding-left="0.7in" border-bottom-width="5pt" border-width="1pt" font-weight="bold" inline-progression-dimension="auto" width="100%">
<fo:table-column column-number="1"/>
<fo:table-body>
<fo:table-row border-bottom-color="rgb(0,0,255)" display-align="before">
<fo:table-cell border-bottom-width="3pt" border-bottom-style="solid" border-bottom-color="rgb(255,255,255)" padding="2pt" text-align="left">
<fo:block text-align="center" font-size="13pt" font-weight="bold" font-family="Helvetica" border-bottom="10pt "></fo:block>
<fo:block>
<xsl:value-of select="/PdfPrinter/Reports/Header/ReportTitle" />
</fo:block>
<fo:block border-bottom-width="8pt" text-align="center" background-color="black"/>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center">
<!-- table start -->
<fo:table role="html:table" table-layout="auto" inline-progression-dimension="auto" line-height="2.5" width="100%" border="0px" border-collapse="collapse" border-spacing="3px" border-style="outset hidden" space-before.conditionality="retain" space-after.conditionality="retain" space-after="1em" space-before="1em">
<!--table header-->
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*">
<fo:table-column column-width="proportional-column-width(4.77)" font-family="sans-serif" font-size="13pt" />
</xsl:for-each>
<fo:table-header>
<fo:table-row height="auto" color="#FFFFFF" background-color="#A1A1A1" text-align="center" font-weight="bold" font-family="sans-serif" font-size="13pt">
<fo:table-cell text-align="center" column-number="16" number-columns-spanned="3" border-after-width="1pt" border-after-style="solid">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$Brokerage"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="19" number-columns-spanned="2">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$ClearingFee"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="21" number-columns-spanned="2">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$StampDuty"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="23" number-columns-spanned="2">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$Penalty"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="25" number-columns-spanned="1">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$OtherCharges"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row height="auto" color="#FFFFFF" background-color="#A1A1A1" text-align="center" font-weight="bold" font-family="sans-serif" font-size="14pt">
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*">
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">
<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">
<fo:table-row display-align="before">
<xsl:for-each select="*">
<fo:table-cell text-align="center" border-top-color="rgb(255, 255, 255)" border-top-style="solid" border-width="1pt" padding="2pt">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
<!-- table end -->
</fo:block>
<fo:block id="last-page"/>
</fo:flow>
</fo:page-sequence>
</fo:root>
元素Charge_x0020_ID实际上是Charge ID,但目前我的XSLT正在打印编码值。我想通过解码特殊字符将列打印为 Charge ID。非常感谢任何帮助。
试试这个模板调用:
<!--xsl:value-of select="name()"/-->
<xsl:call-template name="replaceDecodedSpace">
<xsl:with-param name="prmStr" select="local-name()"/>
</xsl:call-template>
...
<xsl:template name="replaceDecodedSpace">
<xsl:param name="prmStr" select="''"/>
<xsl:variable name="encodedSpace" select="'_x0020_'"/>
<xsl:choose>
<xsl:when test="contains($prmStr,$encodedSpace)">
<xsl:variable name="beforeSpacePart" select="substring-before($prmStr,$encodedSpace)"/>
<xsl:variable name="afterSpacePart" select="substring-after($prmStr,$encodedSpace)"/>
<xsl:value-of select="concat($beforeSpacePart,' ')"/>
<xsl:call-template name="replaceDecodedSpace">
<xsl:with-param name="prmStr" select="$afterSpacePart"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$prmStr"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
结果:
<fo:table-row height="auto"
color="#FFFFFF"
background-color="#A1A1A1"
text-align="center"
font-weight="bold"
font-family="sans-serif"
font-size="14pt">
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">BranchID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Trade Date</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Account No</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">CParty ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Reference No</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Source</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">CDS No</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Dealer ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Stock ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Price</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Quantity</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Currency</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Nett Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Currency</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Nett Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Promo Ind</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Tax Amount</fo:block>
</fo:table-cell>
</fo:table-row>
如果元素名称包含多个解码空格,此模板也适用。
我有一个 XML,在 XML 个元素之间有空格。我正在使用 XSLT 1.0 模板将其转换为 XSL FO 以打印 pdf 报告。我想解码 XSLT 中的值以在 PDF.Below 中打印是我的 XML 和 XSLT 1.0。谁能指导我解码 XML 元素之间的值?
XML
<PdfPrinter>
<Reports>
<Report>
<BranchID>SA-02</BranchID>
<Trade_x0020_Date>2016-08-10T00:00:00</Trade_x0020_Date>
<Account_x0020_No>ABCDE01384</Account_x0020_No>
<CParty_x0020_ID/>
<Reference_x0020_No>TS-N-203-001</Reference_x0020_No>
<Source>N</Source>
<CDS_x0020_No>0000001387</CDS_x0020_No>
<Dealer_x0020_ID>1D01</Dealer_x0020_ID>
<Stock_x0020_ID>0400GA</Stock_x0020_ID>
<Price>0.123000</Price>
<Quantity>-1200</Quantity>
<Currency xmlns="Traded">USD</Currency>
<Nett_x0020_Amount xmlns="Traded">-86.600000</Nett_x0020_Amount>
<Currency xmlns="Local">USD</Currency>
<Nett_x0020_Amount xmlns="Local">-86.600000</Nett_x0020_Amount>
<Promo_x0020_Ind>N</Promo_x0020_Ind>
<Charge_x0020_ID xmlns="Brokerage">BRK-N</Charge_x0020_ID>
<Amount xmlns="Brokerage">50.000000</Amount>
<Charge_x0020_ID>CLR</Charge_x0020_ID>
<Amount xmlns="ClearingFee">10.000000</Amount>
<Charge_x0020_ID xmlns="ClearingFee">SDC</Charge_x0020_ID>
<Amount xmlns="StampDuty">1.000000</Amount>
<Charge_x0020_ID xmlns="StampDuty"/>
<Charge_x0020_ID xmlns="Penalty">0</Charge_x0020_ID>
<Amount xmlns="Penalty">0.000000</Amount>
<Tax_x0020_Amount>0.000000</Tax_x0020_Amount>
</Report>
</Reports>
</PdfPrinter>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ext="http://exslt.org/common"
xmlns:utilityExtension="pdfprinter:extensions:utility"
exclude-result-prefixes="msxsl utilityExtension">
<xsl:output method="xml" indent="yes"
omit-xml-declaration="yes" encoding="utf-8"/>
<xsl:template match="/">
<xsl:variable name="Brokerage">Brokerage</xsl:variable>
<xsl:variable name="ClearingFee">Clearing Fee</xsl:variable>
<xsl:variable name="StampDuty">Stamp Duty</xsl:variable>
<xsl:variable name="Penalty">Penalty</xsl:variable>
<xsl:variable name="OtherCharges">Other Charges</xsl:variable>
<xsl:variable name="columnFontSize">12pt</xsl:variable>
<xsl:variable name="columnFontType">Helvetica</xsl:variable>
<xsl:variable name="headerOrgName">Pn</xsl:variable>
<xsl:variable name="headerPrintedBy">Printed By</xsl:variable>
<xsl:variable name="headerPrintedDate">Printed Date</xsl:variable>
<xsl:variable name="headerReportID">Report ID</xsl:variable>
<xsl:variable name="headerLogo" select
="utilityExtension:MapPath('~/App_Data/Resources/IMAGES/logo.jpg')"/>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- defines the layout master -->
<fo:layout-master-set>
<fo:simple-page-master master-name="all-pages" page-width="894mm" page-height="1300pt" margin-top="10mm" margin-left="20mm" margin-right="20mm" margin-bottom="10mm">
<fo:region-body region-name="xsl-region-body" column-gap="0in" margin="0.8in" margin-left="0.7in" margin-top="2.3in" margin-bottom="1.8in" padding-top="0in"/>
<fo:region-before region-name="xsl-region-before" extent="75mm" />
<fo:region-after region-name="xsl-region-after" extent="7in"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="default-sequence">
<fo:single-page-master-reference master-reference="all-pages"/>
<fo:repeatable-page-master-reference master-reference="all-pages" />
</fo:page-sequence-master>
</fo:layout-master-set>
<!-- starts actual layout -->
<fo:page-sequence master-reference="default-sequence" initial-page-number="1" id="last-page">
<fo:static-content flow-name="xsl-region-before" width="100%" border-top-style="solid" border-top-color="rgb(192,192,192)" padding-top="1pt">
<fo:block>
<fo:table border-collapse="collapse" width="100%" table-layout="fixed" margin-top="-0.002in" padding-left="0.7in" margin-left="0in" border-spacing="5px" space-before.conditionality="retain" space-after.conditionality="retain" space-after="1em" space-before="1em">
<fo:table-column column-width="proportional-column-width(55)" column-number="1"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="2"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="3"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="4"/>
<fo:table-column column-width="proportional-column-width(45)" column-number="5"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell width="50%" text-align="left" padding-left="2pt">
<fo:block color="rgb(0,0,128)" font-size="16pt" font-weight="bold"> </fo:block>
<fo:block color="rgb(0,0,128)" font-weight="bold"></fo:block>
<fo:block padding-left="0in">
<fo:external-graphic src="{$headerLogo}"/>    
<fo:block>
</fo:block>
</fo:block>
<fo:block color="rgb(0,0,128)" font-weight="bold">    </fo:block>
<fo:block color="rgb(0,0,0)" font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
<xsl:value-of select="$headerReportID"/> : <xsl:value-of select="/PdfPrinter/Reports/Header/ReportID" />
</fo:block>
</fo:table-cell>
<fo:table-cell></fo:table-cell>
<fo:table-cell></fo:table-cell>
<fo:table-cell></fo:table-cell>
<fo:table-cell width="100%" text-align="left">
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block>    </fo:block>
<fo:block text-align="left">
<fo:inline font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page"/>
</fo:inline>
</fo:block>
<fo:block text-align="left">
<fo:inline font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
<xsl:value-of select="$headerPrintedBy"/> : <xsl:value-of select="/PdfPrinter/Reports/Report/BrkChgID[(count(current()/preceding-sibling::*)+1)]/@id"/>
</fo:inline>
</fo:block>
<fo:block text-align="left">
<fo:inline font-weight="bold" font-family="{$columnFontType}" font-size="{$columnFontSize}">
<xsl:value-of select="$headerPrintedDate"/> : <xsl:value-of select="/PdfPrinter/Reports/Header/PrintedDate" />
</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:block/>
</fo:block>
<fo:block text-align="center">
<fo:table padding-left="0.7in" border-bottom-width="5pt" border-width="1pt" font-weight="bold" inline-progression-dimension="auto" width="100%">
<fo:table-column column-number="1"/>
<fo:table-body>
<fo:table-row border-bottom-color="rgb(0,0,255)" display-align="before">
<fo:table-cell border-bottom-width="3pt" border-bottom-style="solid" border-bottom-color="rgb(255,255,255)" padding="2pt" text-align="left">
<fo:block text-align="center" font-size="13pt" font-weight="bold" font-family="Helvetica" border-bottom="10pt "></fo:block>
<fo:block>
<xsl:value-of select="/PdfPrinter/Reports/Header/ReportTitle" />
</fo:block>
<fo:block border-bottom-width="8pt" text-align="center" background-color="black"/>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center">
<!-- table start -->
<fo:table role="html:table" table-layout="auto" inline-progression-dimension="auto" line-height="2.5" width="100%" border="0px" border-collapse="collapse" border-spacing="3px" border-style="outset hidden" space-before.conditionality="retain" space-after.conditionality="retain" space-after="1em" space-before="1em">
<!--table header-->
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*">
<fo:table-column column-width="proportional-column-width(4.77)" font-family="sans-serif" font-size="13pt" />
</xsl:for-each>
<fo:table-header>
<fo:table-row height="auto" color="#FFFFFF" background-color="#A1A1A1" text-align="center" font-weight="bold" font-family="sans-serif" font-size="13pt">
<fo:table-cell text-align="center" column-number="16" number-columns-spanned="3" border-after-width="1pt" border-after-style="solid">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$Brokerage"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="19" number-columns-spanned="2">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$ClearingFee"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="21" number-columns-spanned="2">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$StampDuty"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="23" number-columns-spanned="2">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$Penalty"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" column-number="25" number-columns-spanned="1">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="$OtherCharges"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row height="auto" color="#FFFFFF" background-color="#A1A1A1" text-align="center" font-weight="bold" font-family="sans-serif" font-size="14pt">
<xsl:for-each select="/PdfPrinter/Reports/Report[1]/*">
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">
<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">
<fo:table-row display-align="before">
<xsl:for-each select="*">
<fo:table-cell text-align="center" border-top-color="rgb(255, 255, 255)" border-top-style="solid" border-width="1pt" padding="2pt">
<fo:block font-size="13pt" font-family="sans-serif">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
<!-- table end -->
</fo:block>
<fo:block id="last-page"/>
</fo:flow>
</fo:page-sequence>
</fo:root>
元素Charge_x0020_ID实际上是Charge ID,但目前我的XSLT正在打印编码值。我想通过解码特殊字符将列打印为 Charge ID。非常感谢任何帮助。
试试这个模板调用:
<!--xsl:value-of select="name()"/-->
<xsl:call-template name="replaceDecodedSpace">
<xsl:with-param name="prmStr" select="local-name()"/>
</xsl:call-template>
...
<xsl:template name="replaceDecodedSpace">
<xsl:param name="prmStr" select="''"/>
<xsl:variable name="encodedSpace" select="'_x0020_'"/>
<xsl:choose>
<xsl:when test="contains($prmStr,$encodedSpace)">
<xsl:variable name="beforeSpacePart" select="substring-before($prmStr,$encodedSpace)"/>
<xsl:variable name="afterSpacePart" select="substring-after($prmStr,$encodedSpace)"/>
<xsl:value-of select="concat($beforeSpacePart,' ')"/>
<xsl:call-template name="replaceDecodedSpace">
<xsl:with-param name="prmStr" select="$afterSpacePart"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$prmStr"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
结果:
<fo:table-row height="auto"
color="#FFFFFF"
background-color="#A1A1A1"
text-align="center"
font-weight="bold"
font-family="sans-serif"
font-size="14pt">
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">BranchID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Trade Date</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Account No</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">CParty ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Reference No</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Source</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">CDS No</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Dealer ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Stock ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Price</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Quantity</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Currency</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Nett Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Currency</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Nett Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Promo Ind</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Charge ID</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Amount</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block font-size="13pt" font-family="sans-serif">Tax Amount</fo:block>
</fo:table-cell>
</fo:table-row>
如果元素名称包含多个解码空格,此模板也适用。