Filemaker xml通过xslt输出,带有列名

时间:2013-07-15 15:39:05

标签: xslt filemaker

我是xslt编程和xlm的新手。我创建了下面的代码,这个工作正常,除了每列的变量名称,它只显示“colno”如何将列名称输入到输出中?

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

  <xsl:variable name="kMetaData" select="fmp:METADATA/fmp:FIELD"/>
  <xsl:variable name="colno"   
    select="count($kMetaData[following-sibling::fmp:FIELD/@NAME]) + 1" />

  <xsl:template match="/fmp:FMPXMLRESULT">
    <PERSON>
      <xsl:apply-templates select="fmp:RESULTSET/fmp:ROW" />
    </PERSON>
  </xsl:template>

  <xsl:template match="fmp:ROW">
    <ELEMENTS>
      <xsl:apply-templates select="fmp:COL" />
     </ELEMENTS>
  </xsl:template>

  <xsl:template match="fmp:COL">

    <xsl:element name="colno">
      <xsl:value-of select="fmp:DATA" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

如果没有输入xml,很难提出一些建议。但乍看之下<xsl:element name="colno">说“输出一个元素<colno>”。我认为你应该使用像<xsl:element name="{xpath/to/columnName}">

这样的东西

编辑:

根据您的输入xml,“COL”元素的模板应该看起来像

<xsl:template match="COL">
    <xsl:variable name="colPosition" select="position()" />
    <!-- Prevent spaces in NAME attribute of FIELD element -->
    <xsl:variable name="colName" select="translate($kMetaData[$colPosition]/@NAME, ' ', '_')" />
    <xsl:element name="{$colName}">
        <xsl:value-of select="DATA"/>
    </xsl:element>
</xsl:template>

然后输出看起来像

<?xml version="1.0" encoding="utf-8"?>
<PERSON>
    <ELEMENTS>
        <FIRSTNAME>Richard</FIRSTNAME>
        <LASTNAME>Katz</LASTNAME>
        <MIDDLENAME>David</MIDDLENAME>
        <REQUESTDT>1/1/2001</REQUESTDT>
        <salutation>Mr</salutation>
        <Bargaining_Unit>CSEA (02,03,04)</Bargaining_Unit>
        <Field_134>b</Field_134>
    </ELEMENTS>
</PERSON>