0

Stackoverflow の Tomalak のおかげで、「古い」FMPXMLRESULT xml 文法から「新しい」FMRESULTSET xml 文法への単純な XSL 変換を行うことができました。

これは、FMPXMLRESULT 文法を使用した元の xml ファイルです。

<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="06-20-2006" NAME="FileMaker Pro" VERSION="8.5v1"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="pro_page.fp7" RECORDS="2121" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Ident" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Title" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Content" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Footnotes::Num" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Footnotes::Title" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::Num" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::FileName" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::Title" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="1">
    <ROW MODID="135" RECORDID="440">
        <COL><DATA>422</DATA></COL>
        <COL><DATA>title text here</DATA></COL>
        <COL><DATA>some more text here</DATA></COL>
        <COL>
            <DATA>1</DATA>
            <DATA>2</DATA>
            <DATA>3</DATA>
            <DATA>4</DATA>
        </COL>
        <COL>
            <DATA>footnote 1 text here</DATA>
            <DATA>footnote 2 text here</DATA>
            <DATA>footnote 3 text here</DATA>
            <DATA>footnote 4 text here</DATA>
        </COL>
        <COL>
            <DATA>457</DATA>
            <DATA>563</DATA>
        </COL>
        <COL>
            <DATA>image 1 url here</DATA>
            <DATA>image 2 url here</DATA>
        </COL>
        <COL>
            <DATA>title for image 1 here</DATA>
            <DATA>title for image 2 here</DATA>
        </COL>
    </ROW>
</RESULTSET>

これは、私が取得しようとしている FMRESULTSET 形式です (注: 完全な「メタデータ」セクションは必要ありません。空のままにすることができ、不要な属性をいくつか削除しました):

<?xml version="1.0" encoding="UTF-8"?>
<fmresultset version="1.0" xmlns="http://www.filemaker.com/xml/fmresultset">
<error code="0"/>
<product version="8.0.4.128" name="FileMaker Web Publishing Engine" build="06/14/2006"/>
<datasource total-count="2121" timestamp-format="MM/dd/yyyy HH:mm:ss" time-format="HH:mm:ss" table="pro_page" layout="MR_Page_An" date-format="MM/dd/yyyy" database="pro_page.fp7"/>
<metadata></metadata>
<resultset fetch-size="1" count="1">
    <record>
        <field name="Ident"><data>422</data></field>
        <field name="Title"><data>title text here</data></field>
        <field name="Content"><data>some more text here</data></field>
        <relatedset table="Footnotes" count="4">
            <record>
                <field name="Footnotes::Num"><data>1</data></field>
                <field name="Footnotes::Title"><data>footnote 1 text here</data></field>
            </record>
            <record>
                <field name="Footnotes::Num"><data>2</data></field>
                <field name="Footnotes::Title"><data>footnote 2 text here</data></field>
            </record>
            <record>
                <field name="Footnotes::Num"><data>3</data></field>
                <field name="Footnotes::Title"><data>footnote 3 text here</data></field>
            </record>
            <record>
                <field name="Footnotes::Num"><data>4</data></field>
                <field name="Footnotes::Title"><data>footnote 4 text here</data></field>
            </record>
        </relatedset>
        <relatedset table="Images" count="2">
            <record>
                <field name="Images::Num"><data>457</data></field>
                <field name="Images::FileName"><data>image 1 url here</data></field>
                <field name="Images::Title"><data>title for image 1 here</data></field>
            </record>
            <record>
                <field name="Images::Num"><data>563</data></field>
                <field name="Images::FileName"><data>image 2 url here</data></field>
                <field name="Images::Title"><data>title for image 2 here</data></field>
            </record>
        </relatedset>
    </record>
</resultset>

これが、これまでの XSL 変換の様子です。正常に機能しますが、「関連セット」セクションでは機能しません。

<?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="yes"/>
<xsl:key name="kMetaData" match="fmp:METADATA/fmp:FIELD" use="count(preceding-sibling::fmp:FIELD) + 1" />

  <xsl:template match="/fmp:FMPXMLRESULT">
    <fmresultset version="1.0">
    <error code="0"/>
    <product build="01/01/201" name="FileMaker Web Pro" version="8.5"/>
    <datasource database="pro_page.fp7" date-format="MM/dd/yyyy" layout="MR_Page_Fr" table="pro_page" time-format="HH:mm:ss" timestamp-format="MM/dd/yyyy HH:mm:ss" total-count="1"/>
    <metadata></metadata>
    <resultset count="1" fetch-size="1">
      <xsl:apply-templates select="fmp:RESULTSET/fmp:ROW" />
    </resultset>
   </fmresultset>
  </xsl:template>

  <xsl:template match="fmp:ROW">
    <record record-id="0" mod-id="0">
      <xsl:apply-templates select="fmp:COL" />
    </record>
  </xsl:template>

 <xsl:template match="fmp:COL">
  <field name="{string(key('kMetaData', position())/@NAME)}">
    <data><xsl:value-of select="fmp:DATA" /></data>
  </field>
  </xsl:template>

</xsl:stylesheet>

これを手伝ってくれる XSLT に詳しい人はいますか? ありがとう!

4

1 に答える 1

0

ファイルは次のとおりです。長いのでリンク貼っておきます。ただし、それが正しいfmresultset文法であると 100% 確信しているわけではありません。DTD を送っていただければ、確認を試みます。

于 2012-05-30T19:12:58.973 に答える