1

(位置ではなく) 列名を使用して Filemaker からエクスポートしようとしています。現在、位置ごとにエクスポートする次の XSL スタイルシートをエクスポートします。

<?xml version="1.0" encoding="utf-8"?>
<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"/>
<xsl:template match="/">
  <people>
    <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
      <person>
        <name>
          <xsl:value-of select="fm:COL[01]/fm:DATA"/>
        </name>
        <location>
          <xsl:value-of select="fm:COL[02]/fm:DATA"/>
        </location>
      </person>
    </xsl:for-each> 
  </people>
</xsl:template>
</xsl:stylesheet>

何か案は?ありがとう。

4

1 に答える 1

4

コードを読みやすくしたいだけなら、次のような簡単なものをお勧めします。

<!-- expected columns -->
<xsl:variable name="NAME" value="1" />
<xsl:variable name="LOCATION" value="2" />
<!-- ... -->
<people>
  <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
    <person>
      <name>
        <xsl:value-of select="fm:COL[$NAME]/fm:DATA"/>
      </name>
      <location>
        <xsl:value-of select="fm:COL[$LOCATION]/fm:DATA"/>
      </location>
    </person>
  </xsl:for-each> 
</people>

ところで、を<xsl:value-of />省略できますfm:DATA。つまり、次を使用します。

<xsl:value-of select="fm:COL[$LOCATION] />

同じ結果が返されます。

より洗練されたものが必要な場合は、説明してください。

アップデート:

列名で列を参照するのは難しいですが、次のような方法で可能です:

<!-- Define a key to get a field and all fields that precede it by the field name -->
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" use="@NAME" />
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" 
  use="following-sibling::fm:FIELD/@NAME" />
<!-- Then *count* them it in the code like that -->
<people>
  <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
    <person>
      <name>
        <xsl:value-of select="fm:COL[count(key('N', 'name'))]" />
      </name>
      <location>
        <xsl:value-of select="fm:COL[count(key('N', 'location'))]" />
      </location>
    </person>
  </xsl:for-each> 
</people>

完全にエレガントではありませんが、機能します。

于 2010-06-08T08:46:29.453 に答える