Надеюсь, я никого не потеряю, упомянув 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 там. :) Другой вопрос, который у меня возник, заключался в том, как отформатировать числовую цену, когда оригинал хранится как текст (00009.99000000) в XML в валюте $ 9,99, но я могу работать над этим.