Попытка написать шаблон XSLT 1.0, который будет создавать элементы из атрибута Filemaker FMPXMLRESULT METADATA / @ NAME.Вот пример XML:
<?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 и, скорее всего, не имеет смысла в том виде, в котором я его использовал.
Я хотел бы сослаться на текущий элемент fmp: COL в xsl: for-каждый цикл, но я подозреваю, что это не может быть получено в XLST 1.0 с учетом того, как я к нему подхожу.
У кого-нибудь есть предложения или указатели о том, как действовать?!
Чарльз