- 2Lazy
- Medlem ●
- Stockholm
- 2011-01-22 17:29
Och gud vad man lär sig här på forumet, börjar få kläm på xml och xml-import till FM, men går bet på en detalj på sluttampen.
Min fråga gäller (XPath) detaljer i programmering av XSLT-filen, under ROW-taggen, för att kunna importera ett xml dokument, med externt fastställda förutsättningar, i rätt ordning, till ett enda fält och då även särskilja child- taggarna med ett kommatecken (= importera alla <player>-taggar från bifogat xml-dokument till ett race-register /= tabell ) .
(Jag är medveten om att det går att lösa på andra sätt genom att importera tagg-delarna till FM och sen lösa det genom en beräkning. En sådan lösning blir dock svårare att integrera med ett redan befintligt system och kommer också kräva längre tid, nya tabeller, och mer hantering.)
Jag har lyckats att få in all information på en gång i ett fält, men då saknas kommatecken mellan varje tagg-del ( = xml-tagg) , samt att de kommer i fel ordning - alternativet som framgår av avstängda alternativet i koden för XSLT-dokumentet - är att jag får in en player-tagg i rätt ordning med ett kommatecken i mellan varje child-tagg-värde men då kommer bara första <player>-taggs-posten in - som en i och för sig i övrigt korrekt rad.
Så här ser XSLT-filen ut för närvarande
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.filemaker.com/fmpxmlresult"> <xsl:template match="/"> <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> <ERRORCODE>0</ERRORCODE> <PRODUCT BUILD="" NAME="" VERSION=""/> <DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="{count(//race)}" TIMEFORMAT="h:mm:ss a"/> <METADATA> <FIELD> <xsl:attribute name="NAME">results</xsl:attribute><xsl:attribute name="EMPTYOK">YES</xsl:attribute><xsl:attribute name="MAXREPEAT">40</xsl:attribute><xsl:attribute name="TYPE">TEXT</xsl:attribute> </FIELD> </METADATA> <RESULTSET> <xsl:attribute name="FOUND"><xsl:value-of select="count(/race/results)"/></xsl:attribute> <xsl:for-each select="//race/results"> <ROW> <xsl:attribute name="MODID">0</xsl:attribute> <xsl:attribute name="RECORDID">0</xsl:attribute> <xsl:for-each select="//race/results"> <COL> <DATA> <xsl:value-of select="."/> </DATA> </COL> </xsl:for-each> </ROW> </xsl:for-each> </RESULTSET> </FMPXMLRESULT> </xsl:template> </xsl:stylesheet>
OBS - har skrivit lite noteringar inne i koden för att underlätta något
Här är xml-filens kod:
<?xml version="1.0" encoding="utf-8" ?> <race> <startdate>2010/11/06 22:15:14</startdate> <enddate>2010/11/06 22:36:50</enddate> <map> <name>Cervo RC</name> <uid>rbnsR9wy7fiqlIE06kK9FJ7Xe82</uid> <author>marsman</author> <envir>PortoCervo</envir> <length>3.25</length> </map> <settings> <boat>RC44</boat> <rules> <racemode>Fleet Race</racemode> <rulesmode>Auto</rulesmode> <startdelay>3 min</startdelay> </rules> <gamemode>Tactical</gamemode> <startdaytime>12:00:00</startdaytime> <tide>Low</tide> <meteo>Sunny</meteo> <wind> <dir>Northeast</dir> <strength>Force 7</strength> <shift>Shifty</shift> </wind> </settings> <results> <player><rank>1</rank><login>wasserhess</login><nickname>$i$000***$f00SEA$ef0***$000$i</nickname><time>989326</time></player> <player><rank>2</rank><login>michekcano</login><nickname>$00Fmich$fffek$f00cano$fff - </nickname><time>1002176</time></player> <player><rank>3</rank><login>pkulm</login><nickname>$06FPK$000U$F33l$FC0m $i$F63VSK$636Fun</nickname><time>1018301</time></player> <player><rank>4</rank><login>andreslzt</login><nickname>peyolageria lzt</nickname><time>1024956</time></player> <player><rank>5</rank><login>morgane</login><nickname>$0F9morgan</nickname><time>1043370</time></player> <player><rank>6</rank><login>zoreille22</login><nickname>zoreille22</nickname><time>1044489</time></player> <player><rank>7</rank><login>nicolacoca</login><nickname>nicolacoca</nickname><time>1053608</time></player> <player><rank>8</rank><login>caletero_-_lzt</login><nickname>caletero_-_lzt</nickname><time>1059813</time></player> <player><rank>9</rank><login>elsinore__jpn_</login><nickname>$s$fffelsinore $fffJ$f00P$fffN $f00ayc720</nickname><time>1066008</time></player> <player><rank>10</rank><login>josemanuel</login><nickname>$w$00fC$f00h$ff0u$f00f$ff0a $fff- $n$0ffcybersea.es</nickname><time>1066100</time></player> <player><rank>11</rank><login>po_immoi</login><nickname>$s$i$3CFP$FFFo$3CFI $z$s$i$fc3ITF</nickname><time>1069963</time></player> <player><rank>12</rank><login>bullet99</login><nickname>$s$i$001Black Horse $fc0/$063i$001I$fc0AUS </nickname><time>1073693</time></player> <player><rank>13</rank><login>hno3</login><nickname>$00fH$fffNO$f003</nickname><time>1077735</time></player> <player><rank>14</rank><login>marsman</login><nickname>$i$f33No$ff0 vi$0c0ce</nickname><time>1092122</time></player> <player><rank>15</rank><login>colpw</login><nickname>$i$s$dooBreaker$003 ($fc3A$fc3u$fc3s$003)</nickname><time>1115022</time></player> <player><rank>16</rank><login>simurgh</login><nickname>simurgh</nickname><time>DNF</time></player> <player><rank>17</rank><login>jermu90</login><nickname>jermu90</nickname><time>DNF</time></player> <player><rank>18</rank><login>optimist2498</login><nickname>$s$i$090Fre$ff0de$f00rico $00FE. $FFOS. $FFFfulmini</nickname><time>DNC</time></player> <player><rank>19</rank><login>giacomo64</login><nickname>$s$f00Spirito Libero$0F0OV$FFFER$F0040</nickname><time>-1</time></player> <player><rank>20</rank><login>arc</login><nickname> $0f0a$f00r$FFFc </nickname><time>-1</time></player> <player><rank>21</rank><login>_00fmo_fffni_f00ca</login><nickname>$00fJ$fff-$f00L</nickname><time>-1</time></player> <player><rank>22</rank><login>jaacek</login><nickname>$FFF$ maaniek$F00$ pol</nickname><time>-1</time></player> </results> </race>
Hur går jag tillväga för att vid importen få ett fält med alla <player>-taggars child-taggar med följande child-taggordning och med ett särskiljande komma-tecken i mellan (såsom en .cvs-fil tidigare såg ut altså):
rank, time, login, nickname / på 22 rader
- det är min fråga - någon som kan?