2012-04-19 11 views
0

StackoverflowからのTomalakのおかげで、「古い」FMPXMLRESULT xml文法から「新しい」FMRESULTSET xml文法への簡単なXSL変換ができました。FMPXMLRESULTからFMRESULTSETへのXSL変換(人気のある2つのFileMaker文法)

これはFMPXMLRESULT文法と元のXMLファイルである:私は完全な「メタデータ」セクションを必要としない:これは私が注意(取得しようとしているFMRESULTSET形式で

<?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> 

、)それは空のままにすることができ、私はどちらかの必要はありませんいくつかの属性を削除:

<?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変換がこれまでの様子です。それは正常に動作しますが、 "relatedset"セクションでは動作しません。

<?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> 

誰にでも分かりやすいですか?ありがとう!

+0

あなたの目標は何ですか?なぜあなたはこれをやろうとしていますか? –

+0

それは馬鹿だと思いますが、私のファイルメーカーのXMLは "fmresultset"形式のMySqlデータベースに保存されています。このXMLを更新するには、通常のFileMaker Web公開エンジンでphp経由で正常に動作します(WPEは "fmresultset"形式を使用します)。 しかし私のISPはWPEサーバーを解凍しているので、FileMaker ProにXMLエクスポート機能が残っています。fmresultsetオプションはありません。 XSLファイルを使用すると、FmProの "fmpxmlresult"形式を "fmresultset"という形式に1回のクリックで変換することができました...ほとんど... – Ludwig

+0

あなたはそうです、それは馬鹿です:-) - 少なくとも、問題を解決する正しい方法です。 –

答えて

0

ここはthe fileです。それは長すぎるので、私はリンクを投稿します。私は100%ではありません - 確かに正しいですfmresultset文法です。私にDTDを送ってもらえれば、私はチェックしようとします。

+0

Mikhailありがとう、それは動作します! (遅く返事を申し訳ありません) – Ludwig

+0

fmresultset文法の[the dtd](http://dl.dropbox.com/u/86462334/fmresultset.dtd)です – Ludwig

+0

私はさらにテストを行いましたが、あなたのXSLTファイルが動作していますFMPXMLRESULT xml文法をFMRESULTSETに完全に変換するためのものです。本当に本当に良い仕事! このXSLTファイルは、FileMaker Webサイトのどこかに保存する必要があります。これはフォーラム内に残すにはあまりにも貴重です... – Ludwig

関連する問題