2017-09-27 21 views
0

XSL-FOの抽出量

<InvoiceList> 
    <Invoice> 
    <InvoiceAmount WithVATBool="false" VATAmount="96.2" VATPercentage="1" WithVAT="9716.19">9619.99</InvoiceAmount> 
    </Invoice> 
</InvoiceList> 

を私はこの量9619.99とFOPの内側に次のことを抽出したい:

<xsl:value-of select="//Task/InvoiceList/Invoice/InvoiceAmount"/> 

は私のテンプレート9619.99196に私にこれを与えています。 2

私は部分文字列で試してみたので、これをどのように抽出すればいいのか考えてから、NaNを取得します。

ありがとうございます!使用中の

スタイルシート:

<?xml version="1.0"?> 
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://www.stylusstudio.com/xquery" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> 
    <xsl:output indent="yes" encoding="utf-8"/> 
    <xsl:variable name="brojac" select="0"/> 
    <xsl:variable name="timeBase" select="number(//TimeBase/@Val)"/> 
    <xsl:variable name="filefolder" select="/data/imagepath" /> 
    <xsl:template match="/data"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
      <fo:simple-page-master 
       master-name="default-page" 
       page-height="279.4mm" 
       page-width="215.9mm" 
       margin-left="1cm" 
       margin-right="1cm" 
       margin-top="0.5cm" 
       margin-bottom="0.5cm"> 
       <fo:region-body margin-bottom="2cm"/> 
       <fo:region-after extent="1cm"/> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="default-page"> 

      <fo:flow flow-name="xsl-region-body"> 
      <xsl:apply-templates select="/data" mode="case_data"/> 
       <fo:block> 
        <fo:table 
         space-after="0.25cm" 
         table-layout="fixed" 
         width="100%" 
         color="black" 
         font-family="Arial" 
         font-size="10px" 
         text-align="center" 
         height="14px"> 

         <fo:table-column column-width="100%"/> 

         <fo:table-body> 
          <fo:table-row height="14px"> 
           <fo:table-cell          
           font-family="Arial" 
           font-size="10px" 
           text-align="center" 
           color="black" 
           height="14px"> 
            <fo:block> 
             Član 1. 
            </fo:block> 
            <fo:block text-align="justify"> 
             <xsl:value-of select="//Task/InvoiceList/Invoice/InvoiceAmount" /> 
            </fo:block> 
           </fo:table-cell> 
          </fo:table-row> 

         </fo:table-body> 
        </fo:table> 
       </fo:block> 
      </fo:flow> 
     </fo:page-sequence> 
     </fo:root> 
     </xsl:template> 
    </xsl:stylesheet> 

私は

+0

表示されている1行で現在表示されている出力が得られないため、実際に問題を示す完全なスタイルシートを表示する必要があります。この問題はあなたのXSLTのどこか他の場所にあります。ありがとうございました。 –

+0

スタイルシートが上にあります。 –

+0

問題を再現できませんでした。 http://xsltransform.net/pNmBy1Tを参照してください。私はXSLTに 'case_data'をマッチングしているノードがないので、' ' –

答えて

1

あなたはXML内の他の場所で表示される196.2を持っていますか...すべてに、不要なテーブルを削除しましたか? //Task/InvoiceList/Invoice/InvoiceAmountは文書内のすべてTask/InvoiceList/Invoice/InvoiceAmountを選択しており、その値の連結が表示されています。

あなたのXMLの多くを見ることなく、それははるかに言うのは難しいですが、あなたは、現在のdataノードに対する相対たいInvoiceAmountを選択しますXPathのに//Task/InvoiceList/Invoice/InvoiceAmountを減らす必要があります。 XPathをTask/InvoiceList/Invoice/InvoiceAmountに変更するだけの簡単なことかもしれませんが、ここでもあなたのXMLを見ないとわかりません。

<xsl:variable name="timeBase" select="number(//TimeBase/@Val)"/>と似たようなものがあります。文書にTimeBaseが複数ある場合、予期しない結果が生じることがあります。

最後にexclude-result-prefixes="fo"は、生成する最初のものがfo名前空間の要素なので、何も実行しません。 sexslという接頭辞を除外すると便利です。

+0

私は196.2をどこにも持っていません。 96.2はVATAmountの下にあり、1はVATPcentageです。これは私のXMLにある唯一のInvoiceAmountです。 –

+1

要素の文字列値は、そのテキストノードの子孫を連結したものです。属性値は文字列値の一部ではありません。何らかの形で文字列値に含まれていた場合、属性はドキュメントの順序で子孫の前に来るため、テキストノードの値より前に表示されます。最も内側の 'fo:block'の色を変更して、すべてのテキストの色が変わったかどうか確認できますか? –

関連する問題