2011-05-09 72 views
0

試圖編寫一個將從Filemaker FMPXMLRESULT METADATA/@ NAME屬性創建元素的XSLT 1.0模板。下面是示例XML:新手:按位置查找XLST 1.0節點集變量?

<?xml version="1.0" encoding="UTF-16" ?> 
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> 
<METADATA> 
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Type" TYPE="TEXT"/> 
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Level" TYPE="TEXT"/> 
</METADATA> 
<RESULTSET FOUND="2"> 
    <ROW MODID="18" RECORDID="28133"> 
     <COL><DATA>O1</DATA></COL> 
     <COL><DATA>L1</DATA></COL> 
    </ROW> 
    <ROW MODID="5" RECORDID="28153"> 
     <COL><DATA>D12</DATA></COL> 
     <COL><DATA>L1</DATA></COL> 
    </ROW> 
</RESULTSET> 
</FMPXMLRESULT> 

,這裏是我的XLST迄今取得的進展:

<?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="no"/> 

<xsl:variable name="labels" select="fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD/@NAME"/> 

<xsl:template match="fmp:FMPXMLRESULT"> 
    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> 
     <PLAN> 
      <xsl:for-each select="fmp:RESULTSET/fmp:ROW"> 
       <Sign> 
        <xsl:for-each select="fmp:COL"> 
         <xsl:element name="{$labels[position()]}"> 
          <xsl:value-of select="fmp:DATA"/> 
         </xsl:element> 
        </xsl:for-each> 
       </Sign> 
      </xsl:for-each> 
     </PLAN> 
    </FMPXMLRESULT> 
</xsl:template> 

</xsl:stylesheet> 

我麻煩的是第13行:

<xsl:element name="{$labels[position()]}"> 

凡位置()不涉及fmp:COL的位置,而且我用它的方式可能沒有意義。

我想參考的是xsl:for-each循環中當前的fmp:COL元素,但是我懷疑這在XLST 1.0中無法獲得,因爲我正在接近它。

有沒有人有建議或指示如何進行?

非常感謝!

Charles

回答