2013-04-11 83 views
2

記錄數據庫我有相關的數據庫中的XML,並具有生成PDF記錄數據庫。我正在使用FOP將XSLT轉換爲PDF。生成一個PDF在XSLT

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<sql-catalog xmlns="http://www.abc.com"> 
    <schemas> 
     <schema name="abc> 
      <tables> 
       <table name="tab123" degree="1" type="TABLE" rows="144"> 
        <columns> 
         <column name="asd" nullable="true" order="1" sqlType="CHARACTER VARYING" sqlLength="255" fixedLength="2"/> 
         <column name="pqr" nullable="true" order="2" sqlType="CHARACTER VARYING" sqlLength="255" fixedLength="2"/> 
        </columns> 
        <constraints/> 
        <datafiles> 
         <datafile href="abc.txt" checksum="6ba3a161d5" size="12354" format="FIXED" valid="true" recordTerminator="&#xD;&#xA;" checksumtype="MD5" rows="905"/> 
        </datafiles> 
       </table> 
      </tables> 
     </schema> 
    </schemas> 
</sql-catalog> 

我一定要顯示錶名,列和列名的數量。我在XSLT中編寫了以下內容。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="2.0" xmlns:ex="http://exslt.org/dates-and-times" extension-element-prefixes="ex" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.apps.xdo.template.rtf.XSLTFunctions" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:cat="http://www.abc.com"> 
    <xsl:output method="xml" encoding="ISO-8859-1"/> 
    <xsl:template match="cat:sql-catalog"> 
    <fo:root> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm" margin-left="2cm" margin-right="2cm" margin-top="2.0cm" margin-bottom="1.0cm"> 
      <fo:region-body/> 
      <fo:region-after extent="1cm"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 

     <fo:page-sequence master-reference="A4"> 
      <fo:static-content flow-name="xsl-region-after" font-size="8pt"> 
       <fo:block text-align="right"> 
        <fo:page-number/> 
       </fo:block> 
      </fo:static-content> 

     <fo:flow flow-name="xsl-region-body"> 

      <fo:block font-weight="bold" font-size="8pt" space-after="0.5cm"> 
       <xsl:value-of select="cat:schemas/schema/tables/table/@name" /> 
      </fo:block> 

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

在代碼中,我試圖顯示這是在屬性表的名稱,但它似乎並沒有工作。請問任何人都可以告訴我我哪裏錯了?還有如何計算表格中的列數。

回答

1

您需要爲XPath表達式中的每個元素名稱加上cat命名空間。請嘗試:

<xsl:value-of select="cat:schemas/cat:schema/cat:tables/cat:table/@name"/> 
+0

感謝艾羅。解決了這個問題。我絞盡腦汁了這個:) – 2013-04-11 07:11:31

+0

很高興我能幫助! – 2013-04-11 07:22:11

1

提供的改造不前綴"cat"聲明任何命名空間,但是這個前綴都在匹配模式和XPath表達式中使用。

您必須收到錯誤消息如下所示:

Saxon 9.1.0.5J from Saxonica 
Java version 1.6.0_31 
Error at xsl:template on line 13 column 43 of marrowtr.xsl: 
    XPST0081: XSLT Pattern syntax error at char 15 on line 13 in {cat:sql-catalog}: 
    Undeclared namespace prefix {cat} 

解決方案

更換

xmlns:sqlcat="http://www.abc.comr" 

xmlns:cat="http://www.abc.com" 
+0

對不起,這是一個錯字。我的錯。在發佈之前,我必須更改一些數據。我已經解決了這個問題。我的問題依然存在。 – 2013-04-11 06:06:06

1

當XML下面的XSLT運行將得到的結果

XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="2.0" xmlns:ex="http://exslt.org/dates-and-times" extension-element-prefixes="ex" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.apps.xdo.template.rtf.XSLTFunctions" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1" xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <xsl:output method="xml" encoding="ISO-8859-1"/> 
    <xsl:template match="sql-catalog"> 
    <fo:root> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm" margin-left="2cm" margin-right="2cm" margin-top="2.0cm" margin-bottom="1.0cm"> 
      <fo:region-body/> 
      <fo:region-after extent="1cm"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 

     <fo:page-sequence master-reference="A4"> 
      <fo:static-content flow-name="xsl-region-after" font-size="8pt"> 
       <fo:block text-align="right"> 
        <fo:page-number/> 
       </fo:block> 
      </fo:static-content> 

     <fo:flow flow-name="xsl-region-body"> 

      <fo:block font-weight="bold" font-size="8pt" space-after="0.5cm"> 
       <xsl:value-of select="schemas/schema/tables/table/@name" /> 
      </fo:block> 

      <fo:block font-weight="bold" font-size="8pt" space-after="0.5cm"> 
       <xsl:value-of select="count(schemas/schema/tables/table/columns/column)"/> 
      </fo:block> 

      <xsl:for-each select="schemas/schema/tables/table/columns/column"> 
       <fo:block font-weight="bold" font-size="8pt" space-after="0.5cm"> 
       <xsl:value-of select="@name"/> 
       </fo:block> 
      </xsl:for-each> 
     </fo:flow> 
    </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

輸入XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<sql-catalog xmlns:sqlcat="http://www.def.com"> 
    <schemas> 
     <schema name="abc"> 
      <tables> 
       <table name="tab123" degree="1" type="TABLE" rows="144"> 
        <columns> 
         <column name="asd" nullable="true" order="1" sqlType="CHARACTER VARYING" sqlLength="255" fixedLength="2"/> 
         <column name="pqr" nullable="true" order="2" sqlType="CHARACTER VARYING" sqlLength="255" fixedLength="2"/> 
        </columns> 
        <constraints/> 
        <datafiles> 
         <datafile href="abc.txt" checksum="6ba3a161d5" size="12354" format="FIXED" valid="true" recordTerminator="&#xD;&#xA;" checksumtype="MD5" rows="905"/> 
        </datafiles> 
       </table> 
      </tables> 
     </schema> 
    </schemas> 
</sql-catalog> 

輸出:

<?xml version='1.0' encoding='ISO-8859-1' ?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.apps.xdo.template.rtf.XSLTFunctions" xmlns:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1"><fo:layout-master-set><fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm" margin-left="2cm" margin-right="2cm" margin-top="2.0cm" margin-bottom="1.0cm"><fo:region-body/><fo:region-after extent="1cm"/></fo:simple-page-master></fo:layout-master-set><fo:page-sequence master-reference="A4"><fo:static-content flow-name="xsl-region-after" font-size="8pt"><fo:block text-align="right"><fo:page-number/></fo:block></fo:static-content><fo:flow flow-name="xsl-region-body"><fo:block font-weight="bold" font-size="8pt" space-after="0.5cm">tab123</fo:block><fo:block font-weight="bold" font-size="8pt" space-after="0.5cm">2</fo:block><fo:block font-weight="bold" font-size="8pt" space-after="0.5cm">asd</fo:block><fo:block font-weight="bold" font-size="8pt" space-after="0.5cm">pqr</fo:block></fo:flow></fo:page-sequence></fo:root> 
+0

非常感謝!它確實解決了有關列數的問題。我有兩個答案在這裏,希望我能他們兩個標記爲答案,但我標誌着艾羅的解決方案,答案,因爲它是之前發佈並解決了我面臨的問題。 但我非常欣賞的!再次感謝...... – 2013-04-11 07:08:26

+0

@SnowLeopard你是歡迎 – siva2012 2013-04-11 08:15:35