Filemaker について言及することで誰かを失うことのないように願っています。XMLエクスポートをSSISで使用できるものに変えようとしています。FM のネイティブ XML エクスポートには、同じ XML ファイルの別々のセクションにフィールド名とデータがあります。これは、私が何をする必要があるか、私が現在行っていること、および参照用の下部にある元の FM エクスポートをリストしています。今朝まで XML の翻訳を見たことがないので、ご容赦ください :D. 必要に応じてさらに情報を投稿できます。
<!-- What we actually want example -->
<?xml version="1.0" encoding="UTF-8"?>
<PRODUCTRECS>
<PRODUCT>
<name>Dr. Zim</name>
<address>1234 Internet Way</address>
<city/><state/><zip/>
</PRODUCT>
...
</PRODUCTRECS>
XSLt を使用して、上部のフィールド名を読み取り、実際のデータを翻訳するときにフィールド名をその周りに配置する方法はありますか? 現在、次のように IF ステートメントを使用して位置を選択するだけです (これは機能しますが、非常に依存性が高く、面倒です)。
<!-- Current nightmare code, check for each individually and print it out -->
<xsl:template match="fmp:FMPXMLRESULT">
<PRODUCTRECS>
<xsl:for-each select="fmp:RESULTSET/fmp:ROW">
<PRODUCT>
<xsl:for-each select="fmp:COL">
<xsl:if test="position()=1">
<name><xsl:value-of select="fmp:DATA"/></name>
</xsl:if>
...
</xsl:for-each>
</PRODUCT>
</xsl:for-each>
</PRODUCTRECS>
</xsl:template>
これは、デフォルトで Filemaker が出力するものです。
<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-01-2009" NAME="FileMaker Pro" VERSION="10.0v3"/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="filename.fp7" RECORDS="10" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="name" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="address" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="city" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="state" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="zip" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="10">
<ROW MODID="0" RECORDID="1">
<COL><DATA>Dr. Zim</DATA></COL>
<COL><DATA>1234 Internet Way</DATA></COL>
<COL><DATA></DATA></COL>
<COL><DATA></DATA></COL>
<COL><DATA></DATA></COL>
...
</ROW>
...
</RESULTSET>
</FMPXMLRESULT>
第一人者の XSLTers を楽しみにしています。:) 私が抱えていたもう 1 つの質問は、オリジナルがテキスト (00009.99000000) として XML に保存されている場合に数値の価格を $9.99 の通貨にフォーマットする方法でしたが、私はこれに取り組むことができます。