Новичок: поиск переменных в XLST 1.0 по позиции? - PullRequest
0 голосов
/ 10 мая 2011

Попытка написать шаблон 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 с учетом того, как я к нему подхожу.

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

Чарльз

1 Ответ

1 голос
/ 07 июля 2011

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

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

...