Новичок: поиск переменной узла XLST 1.0 по положению?

Попытка написать шаблон 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()]}">

Где position() не относится к положению fmp:COL и, вероятно, бессмысленно, как я его использовал.

На что я хотел бы сослаться, так это на текущий элемент fmp:COL в цикле xsl:for-each, но я подозреваю, что его нельзя получить в XLST 1.0, учитывая мой подход к этому.

У кого-нибудь есть предложения или указатели о том, как действовать?

Большое спасибо!

Чарльз


person cturner    schedule 09.05.2011    source источник


Ответы (1)


Взгляните на этот вопрос/ответ. Возможно, это то, что вы ищете. Filemaker XSL Выбрать столбец по имени

Обновление: в этом посте также есть отличные решения аналогичного вопроса: XSLT-вопрос. Как связать теги полей с данными, если исходный XML содержит их в отдельных разделах?

person AndreasT    schedule 06.07.2011