0

我是 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>
4

1 回答 1

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>
于 2013-07-15T16:47:22.393 回答