2013-04-11 3 views
2

데이터베이스와 관련된 XML을 가지고 있으며 데이터베이스를 문서화하기 위해 PDF를 생성해야합니다. XSLT를 PDF로 변환하기 위해 FOP를 사용하고 있습니다.XSLT에서 데이터베이스를 문서화하기 위해 PDF를 생성하십시오.

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

Thanks Eero. 그것으로 문제가 해결됩니다. 나는 이것에 내 머리를 찼다 :) –

+0

다행 내가 도울 수있어! –

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" 

로 :

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

오타라고해서 죄송합니다. 내 잘못이야. 여기에 게시하기 전에 일부 데이터를 변경해야했습니다. 나는 이제 그 질문에 고정시켰다. 내 문제는 여전히 남아 있습니다. –

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

많은 사람 감사합니다! 그것은 열의 수에 관한 나의 문제를 해결했다. 여기에 두 가지 답변이 있습니다. 둘 다 답변으로 표시 할 수 있었으면 좋겠지 만, 전에 게시 된 문제를 해결하기 때문에 Eero 솔루션을 대답으로 표시하고 있습니다. 하지만 많이 고맙습니다. 다시 한 번 감사드립니다 ... –

+0

@SnowLeopard Welcome is – siva2012

관련 문제