2012-05-08 80 views
2

我知道,我可以用DOMAPI在Java中像下面創建xml文件編程:創建XSLT文件編程

DocumentBuilderFactory documentBuilderFactory = 
    DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 

Document document = documentBuilder.newDocument(); 
Element rootElement = document.createElement("map"); 
document.appendChild(rootElement); 

Element em = document.createElement("string"); 
em.setAttribute("name", "FirstName"); 
.... 

但是否有任何API的構建一個xslt樹? (一個像大教堂例如API)

我需要somehing這樣的:

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo"> 
<xsl:template match="root"> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
    <fo:simple-page-master master-name="my-page"> 
     <fo:region-body margin="1in"/> 
    </fo:simple-page-master> 
    </fo:layout-master-set> 

    <fo:page-sequence master-reference="my-page"> 
    <fo:flow flow-name="xsl-region-body"> 
     <fo:block> 
     <fo:external-graphic width="100pt" height="100pt" content-width="50pt" content-height="50pt" src="images/shopping-cart_100.jpg"/> 
     </fo:block> 
     <fo:block>Good Morning, <xsl:value-of select="name" />!</fo:block> 
     <fo:block> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold"> 
         <fo:block> 

和:

   <xsl:for-each select="./friend"> 
       <fo:table-row> 
       <fo:table-cell border="solid 1px black" text-align="center"> 
        <fo:block> 
         <xsl:value-of select="position()" /> 
        </fo:block> 
       </fo:table-cell> 
       <fo:table-cell border="solid 1px black" text-align="center"> 
        <fo:block> 
         <xsl:value-of select="name" /> 
        </fo:block> 
       </fo:table-cell> 
       <fo:table-cell border="solid 1px black" text-align="center"> 

在此先感謝。

+2

'XSLT' is valid'XML',so yes you can。 – climbage

+0

@climbage請花一點時間強調你的評論和回答 – GingerHead

+2

如果你可以構造xml,那麼你可以構造xslt .. xslt是XML ... –

回答

3

由於XSLT是XML也一樣,你可以簡單地使用同樣的策略:

... 
Document document = documentBuilder.newDocument(); 

Element rootElement = document.createElement("xsl:stylesheet"); 
// adding attributes like namespaces etc... 

document.appendChild(rootElement); 
Element em = document.createElement("xsl:template"); 
em.setAttribute("match", "/"); 

等等...

但它不是很優雅。你應該使用一個庫或框架,你應該很容易找到一個搜索引擎。

+0

請檢查我的更新; – GingerHead

+1

那麼,這很複雜:)你可以像我所示的那樣創建XSLT:'Element rootElement = document.createElement(「xsl:stylesheet」); rootElement.setAttribute(「version」,「1.1」);'等等。或者你可以嘗試使用一個庫,它可以幫助你這麼做......也許,由Simone Gianni提到的Apache Cocoon將會完成這項工作,但我不能說因爲我以前從未使用過它...... – javatutorial

+0

但是那麼巨大的複雜性呢? .hm ..一定有更好的辦法... – GingerHead

1

由於XSLT是XML文件,因此可以使用與創建XML文件相同的方式創建XSLT。但是,如果你必須處理XML/XSLT轉換,Apache Cocoon 3有一個非常輕量級的XML/XSLT管道系統來用作庫,而不是手動處理所有XML DOM和XSLT轉換。

+0

請檢查我的更新; – GingerHead

+0

Cacoon在我的問題所要求的術語中沒有做任何事情! – GingerHead

1

DOM是創建XML的一種非常麻煩的方式。

還有更好的方法 - 使用XSLT。

XML越複雜,使用XSLT而不是DOM來創建它的勝利越大。

沒有理由不能使用XSLT來創建XSLT(甚至還有一個特殊的聲明xsl:namespace-alias使它更容易一些 - 搜索xsl:namespace-alias會顯示它的使用示例

+0

請你指定這可能對我有幫助嗎?我需要一個'API'來動態創建'xslt'文件! – GingerHead

+0

@MikeMyers:在這裏看到一個例子:http://dnovatchev.wordpress。com/2006/10/21/a-stylesheet-to-write-xslt-code/ –

+0

@DimitreNovatchev在這個頁面上沒有任何東西 - 一定是舊的! – GingerHead