2017-07-05 14 views
0

XSL FOを使用して、XMLデータをファイルからPDFドキュメントとしてレンダリングされたテーブルに変換しています。 XMLにデータが入っていない場合は空のテーブル構造をレンダリングするように求められています。xsl foレンダリング空のテーブル構造体内のデータがない場合

Iは、以下のコード

 <!-- Addresses --> 
      <fo:table border="1px solid black" table-layout="fixed" width="100%"> 
      <fo:table-column column-width="2in"/> 
      <fo:table-column column-width="2in"/> 
      <fo:table-column column-width="2.5in"/> 
      <fo:table-column column-width="2.5in"/>    
      <fo:table-column column-width="2in"/> 
      <fo:table-header> 
       <fo:table-row> 
        <fo:table-cell border="0.1pt solid black" text-align="left" font-size="12pt" font-weight="bold" number-columns-spanned="5" background-color= "#B6B6B4"><fo:block>Addresses</fo:block></fo:table-cell>           
       </fo:table-row> 
         <fo:table-row> 
         <fo:table-cell border="0.1pt solid black" text-align="left" font-size="10pt" font-weight="bold"> 
           <fo:block> Address Type </fo:block> 
          </fo:table-cell> 
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="10pt" font-weight="bold"> 
           <fo:block> Fields</fo:block> 
          </fo:table-cell>         
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="10pt" font-weight="bold"> 
           <fo:block> Values </fo:block> 
          </fo:table-cell>             
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="10pt" font-weight="bold"> 
           <fo:block> Data Source</fo:block> 
          </fo:table-cell> 
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="10pt" font-weight="bold"> 
           <fo:block> DMC Doc Link</fo:block> 
          </fo:table-cell>                                
         </fo:table-row>        
        </fo:table-header> 
        <fo:table-body> 

         <xsl:if test="core/clientMembers/address"> 
          <xsl:apply-templates select="core/clientMembers/address"/> 
         </xsl:if>        
         <xsl:if test="not(core/clientMembers/address)"> 
          <fo:table-row> 
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="9pt"><fo:block>Primary Address</fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
         </fo:table-row>         
         <fo:table-row> 
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="9pt"><fo:block>Incorporated Address</fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          </fo:table-row> 
          <fo:table-row> 
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="9pt"><fo:block>Registered Address</fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          </fo:table-row> 
          <fo:table-row> 
          <fo:table-cell border="0.1pt solid black" text-align="left" font-size="9pt"><fo:block>Mailing Address</fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          <fo:table-cell border="0.1pt solid black"><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
          </fo:table-row>                         
         </xsl:if> 
        </fo:table-body> 
       </fo:table> 

を試み期待しかし、コードのこの部分が動作していません。 XSL FOで目的の動作を達成する方法があるかどうかを専門家がpls pls plsに通知できますか? "core/clientMain/coverage"はxslテンプレートです。

+1

提示のコードでは、整形式XMLではありませんので、この特定のコードが動作していない場合、それは驚くことではありません。明白な修正が適用されたと仮定すると、それが適用される入力データと望みの結果に関する情報なしでは、この変換に関してあまり言い表せなかった。 –

+0

コードはXMLを入力として受け取るXSLコードスニペットです。しかし、私は完全なテーブルスニペットを提供しています。あなたの考えを感謝します。 –

答えて

0

あなたが提示しているコードでは、「テーブル本体を空のままにしておいて」という意味が少し不明です。確かに、XPath式core/clientMain/coverageが空のノードセットに評価された場合には、<fo:table-row>を介さずに、<fo:table-body>要素の中に単一の<fo:table-cell>という子要素を生成するので、あなたが望むことはできません。

空のセルの行(5つの見出しと一致するように5つの見かけ上のセル)を生成したいと思うかもしれませんが、行が全くありませんが、あなたが提示したものは理にかなっていません。すべての場合において

ない行が容易である:単純に

     <xsl:if test="core/clientMain/coverage"> 
          <xsl:apply-templates select="core/clientMain/coverage"/> 
         </xsl:if> 

を残し、第二xsl:if要素とその内容を省略する(Iは、実際にデータがある場合に意図したとおり、その一部が機能することを推測している。)

実際に空のデータ行を提供する場合は、それを入力してください。詳細は、特定のニーズに依存するが、それは次のようになります。

    <xsl:if test="core/clientMain/coverage"> 
         <xsl:apply-templates select="core/clientMain/coverage"/> 
        </xsl:if> 
        <xsl:if test="not(core/clientMain/coverage)"> 
         <fo:table-row> 
         <fo:table-cell><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
         <fo:table-cell><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
         <fo:table-cell><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
         <fo:table-cell><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
         <fo:table-cell><fo:block white-space-treatment="preserve"><fo:leader /></fo:block></fo:table-cell> 
         </fo:table-row> 
        </xsl:if>             
+0

ありがとうございます。あなたのソリューションは、データがない場合に空の行を持つすべてのテーブルを作成するという魅力のように機能します。しかし、上記の解が空の行とテーブルを生成しないところに1つのテーブルが残っています。 私は上記のコードを更新しました... plsは見ています..私は今数時間それを行ってきたし、把握しているようです:( –

+0

@PayalM、それは明らかではありません* how *回答が得られた後に質問に実質的な変更を加えることは不適切ですが、最終的に答えは同じです。結果ツリーに表示する必要がある書式設定オブジェクトは、入力要素を変換することでそれを達成できない場合は、必要な要素を直接挿入することで実現する必要があります。 –

関連する問題