4

Filemakerデータベースからいくつかのデータをエクスポートし、XSLTを介して変換しようとしています

私はほとんどの方法を手に入れましたが、いくつかのネストされたデータで立ち往生しています:

XML出力の現在の構造は次のとおりです。

    <?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="07-18-2011" NAME="FileMaker" VERSION="ProAdvanced 11.0v4"/>
    <DATABASE DATEFORMAT="D/m/yyyy" LAYOUT="" NAME="bubbles.fp7" RECORDS="34604" TIMEFORMAT="k:mm:ss "/>
    <METADATA>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="description intro" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Description Line 1" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Description Line 2" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="description short" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="description W3" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Destination URL" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="EAN Code" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="product code W1" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="product group name" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="product name W6" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="stock_for_sale_quantity" TYPE="NUMBER"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="UPC Code" TYPE="NUMBER"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="web link standard" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="products_ADDITIONAL_IMAGES::full url" TYPE="TEXT"/>
    </METADATA>
    <RESULTSET FOUND="6">
        <ROW MODID="5678" RECORDID="5051">
            <COL>
                <DATA>description info here</DATA>
            </COL>
            <COL>
                <DATA> desc line 1</DATA>
            </COL>
            <COL>
                <DATA>desc line 2</DATA>
            </COL>
            <COL>
                <DATA>short description here</DATA>
            </COL>
            <COL>
                <DATA>
Reall long description goes in here</DATA>
            </COL>
            <COL>
                <DATA>url to product</DATA>
            </COL>
            <COL> 
                <DATA/>
            </COL>
            <COL>
                <DATA>SKU</DATA>
            </COL>
            <COL>
                <DATA>Acoustic guitars</DATA>
            </COL>
            <COL>
                <DATA>Epiphone EJ-200 Acoustic Guitar Vintage Sunburst EJ200</DATA>
            </COL>
            <COL>
                <DATA>0</DATA>
            </COL>
            <COL>
                <DATA>711106264509</DATA>
            </COL>
            <COL>
                <DATA>http://www.mywebsite.co.uk/catalog/product/view/id/15186</DATA>
            </COL>
            <COL>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/additional/epiej200vsbrst_01.jpg</DATA>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/additional/epiej200vsbrst_02.jpg</DATA>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/additional/epiej200vsbrst_03.jpg</DATA>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/additional/epiej200vsbrst_04.jpg</DATA>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/additional/epiej200vsbrst_05.jpg</DATA>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/additional/epiej200vsbrst_06.jpg</DATA>
                <DATA>http://www.mywebsite.co.uk/store/images/uploads/epiej200vsbrst.jpg</DATA>
            </COL>
        </ROW>

私のXSLはある程度機能していますが、各画像を選択するためにXSLを取得することはできません。

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpxmlresult" version="1.0" exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="windows-1251" indent="yes"/>
<xsl:template match="/">
    <product>
        <product_count>
            <xsl:value-of select="count(//fmp:ROW)"/>
        </product_count>
        <xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
            <product_info>
                <description_info>
                    <xsl:value-of select="fmp:COL[1]/fmp:DATA"/>
                </description_info>
                <desc_line_1>
                    <xsl:value-of select="fmp:COL[2]/fmp:DATA"/>
                </desc_line_1>
                <desc_line_2>
                    <xsl:value-of select="fmp:COL[3]/fmp:DATA"/>
                </desc_line_2>
                <short_description>
                    <xsl:value-of select="fmp:COL[4]/fmp:DATA"/>
                </short_description>
                <long_description>
                    <xsl:value-of select="fmp:COL[5]/fmp:DATA"/>
                </long_description>
                <dest_url>
                    <xsl:value-of select="fmp:COL[6]/fmp:DATA"/>
                </dest_url>
                <ean>
                    <xsl:value-of select="fmp:COL[7]/fmp:DATA"/>
                </ean>
                <sku>
                    <xsl:value-of select="fmp:COL[8]/fmp:DATA"/>
                </sku>
                <group_name>
                    <xsl:value-of select="fmp:COL[9]/fmp:DATA"/>
                </group_name>
                <product_name>
                    <xsl:value-of select="fmp:COL[10]/fmp:DATA"/>
                </product_name>
                <stock_level>
                    <xsl:value-of select="fmp:COL[11]/fmp:DATA"/>
                </stock_level>
                <upc>
                    <xsl:value-of select="fmp:COL[12]/fmp:DATA"/>
                </upc>
                <web_link>
                    <xsl:value-of select="fmp:COL[13]/fmp:DATA"/>
                </web_link>
                <position>
                    <xsl:value-of select="fmp:DATA"/>
                </position>
                <images>
                    <xsl:variable name="count" select="count(fmp:COL[14]/fmp:DATA)"/>
                    <image_count>
                        <xsl:value-of select="$count"/>
                    </image_count>
                    <xsl:for-each select="fmp:COL[14]/fmp:DATA[position()&lt;=$count]">
                        <img>
                            <xsl:value-of select="position()"/>
                        </img>
                    </xsl:for-each>
                </images>
            </product_info>
        </xsl:for-each>
    </product>
</xsl:template>

これは、正しい数のタグを提供するビットを除いて機能しますが、データはありません

    <images>
        <image_count>7</image_count>
        <img/>
        <img/>
        <img/>
        <img/>
        <img/>
        <img/>
        <img/>
    </images>

最後の小さなループを手伝ってくれる人はいますか?

4

1 に答える 1

0

あなたは物事を必要以上に複雑にしている:

<xsl:for-each select="fmp:COL[14]/fmp:DATA">
  <img>
    <xsl:value-of select="."/>
  </img>
</xsl:for-each>

あなたに与える

<img>http://www.absolutemusic.co.uk/store/images/uploads/additional/epiej200vsbrst_01.jpg</img>
<img>http://www.absolutemusic.co.uk/store/images/uploads/additional/epiej200vsbrst_02.jpg</img>
....

余談ですが、私は過去にFileMaker XSLTを作成し、正気を保つ必要がありました(各フィールドの正しい列インデックスを覚えておく必要はありません)。次のようなトリックを使用しました。

<xsl:variable name="mdf" select="/fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD" />
<xsl:variable name="descIntro" select="count($mdf[
    following-sibling::fmp:FIELD/@NAME = 'description intro']) + 1" />
<xsl:variable name="descL1" select="count($mdf[
    following-sibling::fmp:FIELD/@NAME = 'Description Line 1']) + 1" />

等々。これにより、フィールド名ごとにそのフィールドの正しいインデックスを含む変数が作成されるため、のfmp:COL[$images]代わりにのような式を使用できますfmp:COL[14]。これには、後でエクスポート定義を変更してXSLTが自動的に補正する追加のフィールドを含める場合に、すべての数値を手動で変更する必要がないという追加の利点があります。

于 2012-10-30T11:12:38.087 に答える