我在Filemaker中有一个数据库,我想用这种布局导出xml格式的表:
<?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>
在结果文件中,行与行之间存在大量空间,而不是标签。
答案 0 :(得分:2)
为了让结果自动缩进 ,请启动 样式表:
<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"/>
然而,这将不产生您显示的结果,因为您的
缩进不是基于输出的实际层次结构,其中
tipologia
,nome
,ingrediente
和qta
都是兄弟姐妹
彼此。
为了获得预期输出中显示的假缩进,您 必须禁用自动缩进并插入所需的 空格作为文字文本,例如:
<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> </xsl:text>
<xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
<xsl:text>	</xsl:text>
<tipologia><xsl:value-of select="fm:COL[$TYPO]/fm:DATA"/></tipologia>
<xsl:text> 		</xsl:text>
<nome><xsl:value-of select="fm:COL[$NAME]/fm:DATA"/></nome>
<xsl:text> 			</xsl:text>
<ingrediente><xsl:value-of select="fm:COL[$INGREDIENT]/fm:DATA"/></ingrediente>
<xsl:text> 				</xsl:text>
<qta><xsl:value-of select="fm:COL[$QTY]/fm:DATA"/></qta>
<xsl:text> </xsl:text>
</xsl:for-each>
</ricette>
</xsl:template>
另请注意,在您的预期输出中,似乎有分组 按名称的成分 - 但你的样式表没有做任何事情 实现这样的分组。
我不确定是什么导致双重回报;我建议你做 确保样式表仅使用LF或CR作为行分隔符,而不是 都。它也可能是由您的应用程序创建的工件 用于查看结果(特别是如果你在Windows上)。