2015-06-27 48 views
0

創建出口數據的正確的XSL文件,我在的Filemaker數據庫,我想表中以XML格式導出用這個佈局:從的FileMaker

<?xml version="1.0" encoding="UTF-8"?> 
<ricette> 
    <tipologia>Gelato al Latte</tipologia> 
     <nome>Fior di Panna</nome> 
      <ingrediente>BaseBiancaScirocco_2014 no condensato</ingrediente> 
       <qta>1234</qta> 
      <ingrediente>Panna Fresca 35%mg</ingrediente> 
       <qta>1234</qta> 
      <ingrediente>Latte Intero Fresco AQ</ingrediente> 
       <qta>1234</qta> 
    <tipologia>BaseGiallaScirocco</tipologia> 
    .... 
    .... 
</ricette> 

這是的FileMaker數據表:

http://postimg.org/image/hjoparu8b/

我創造了這個XSL導出文件:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fm="http://www.filemaker.com/fmpxmlresult" 
    exclude-result-prefixes="fm"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <!-- expected columns --> 
    <xsl:variable name="TYPO" select="1" /> 
    <xsl:variable name="NAME" select="2" /> 
    <xsl:variable name="INGREDIENT" select="3" /> 
    <xsl:variable name="QTY" select="4" /> 

    <xsl:template match="/"> 
    <ricette> 
     <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW"> 
      <tipologia><xsl:value-of select="fm:COL[$TYPO]/fm:DATA"/></tipologia> 
      <nome><xsl:value-of select="fm:COL[$NAME]/fm:DATA"/></nome> 
      <ingrediente><xsl:value-of select="fm:COL[$INGREDIENT]/fm:DATA"/></ingrediente> 
      <qta><xsl:value-of select="fm:COL[$QTY]/fm:DATA"/></qta> 
     </xsl:for-each> 
    </ricette> 
    </xsl:template> 
</xsl:stylesheet> 

但結果是:

<?xml version="1.0" encoding="UTF-8"?> 

<ricette> 

<tipologia>Gelato al Latte</tipologia> 

<nome>Fior di Panna</nome> 

<ingrediente>BaseBiancaScirocco_2014 no condensato</ingrediente> 

<qta>1234</qta> 

<tipologia>Gelato al Latte</tipologia> 

<nome>Fior di Panna</nome> 

<ingrediente>Panna Fresca 35%mg</ingrediente> 

<qta>1234</qta> 

<tipologia>Gelato al Latte</tipologia> 

<nome>Fior di Panna</nome> 

<ingrediente>Latte Intero Fresco AQ</ingrediente> 

<qta>1234</qta> 

... 
... 
<ricette> 

在結果文件中有很多的行與行和療法空間沒有標籤。

回答

2
  1. 這有什麼區別?

    <xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:fm="http://www.filemaker.com/fmpxmlresult" 
        xmlns:xalan="http://xml.apache.org/xalan" 
        exclude-result-prefixes="fm xalan"> 
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4"/> 
    

    然而,這將產生你展示的結果,因爲你的 縮進不是基於:

  2. 爲了有結果縮進自動,與啓動 樣式表在輸出的實際層次結構,其中 tipologianomeingredienteqta兄弟姐妹的 彼此。

    爲了讓假縮進如你預期的輸出,你 必須禁用自動縮進和插入所需 空格作爲文字文本,例如:

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fm="http://www.filemaker.com/fmpxmlresult" 
    exclude-result-prefixes="fm"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/> 
    
    <!-- expected columns --> 
    <xsl:variable name="TYPO" select="1" /> 
    <xsl:variable name="NAME" select="2" /> 
    <xsl:variable name="INGREDIENT" select="3" /> 
    <xsl:variable name="QTY" select="4" /> 
    
    <xsl:template match="/"> 
        <ricette> 
         <xsl:text>&#10;</xsl:text> 
         <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW"> 
          <xsl:text>&#9;</xsl:text> 
          <tipologia><xsl:value-of select="fm:COL[$TYPO]/fm:DATA"/></tipologia> 
          <xsl:text>&#10;&#9;&#9;</xsl:text> 
          <nome><xsl:value-of select="fm:COL[$NAME]/fm:DATA"/></nome> 
          <xsl:text>&#10;&#9;&#9;&#9;</xsl:text> 
          <ingrediente><xsl:value-of select="fm:COL[$INGREDIENT]/fm:DATA"/></ingrediente> 
          <xsl:text>&#10;&#9;&#9;&#9;&#9;</xsl:text> 
          <qta><xsl:value-of select="fm:COL[$QTY]/fm:DATA"/></qta> 
          <xsl:text>&#10;</xsl:text> 
         </xsl:for-each> 
        </ricette> 
    </xsl:template> 
    

  3. 還請注意,在您的預期產出中,似乎按名稱將 的成分分組 - 但您的樣式表不會對 做任何事情來實現此類分組。

  4. 我不確定是什麼原因導致了雙重退貨;我建議你製作 確保你的樣式表只使用LF或CR作爲行分隔符,而不是 。它也可能是由您 用於查看結果的應用程序創建一個工件(特別是如果你使用的是Windows)。

+0

是的,縮進是正確的,問題是有很多行空(行間空間),我不想這個,我希望現在清楚,謝謝! –

+0

@AndyBand我在點#1和#4解決了這個。 –