2009-02-28 6 views
0

J'ai une application qui stocke sa base de données utilisateur dans un fichier XML et j'ai besoin d'exporter les champs sélectionnés vers Filemaker donc mon client et extraire les données sur Filemaker. J'ai réussi à faire un fichier XSLT pour importer des éléments XML, mais je n'arrive pas à trouver un moyen d'importer des éléments. Les pointeurs dans la résolution de ce problème sont très attendus.Comment importer des attributs et des éléments de XML vers Filemaker?

Exemple de fichier XML:

<?xml version="1.0" encoding="utf-8"?> 
<APPLICATION_NAME> 
    <USERS> 
    <USER> 
     <ID>15001</ID> 
     <USERNAME>Administrator</USERNAME> 
     <!-- other elements --> 
     <PROPERTYBAG> 
     <ITEM NAME="LastModifiedDate" VALUE="Fri, 05 Sep 2008 13:13:16 GMT"/> 
     <ITEM NAME="Registered" VALUE="5.9.2008 16:13:16"/> 
     <!-- other elements --> 
     </PROPERTYBAG> 
    </USER> 
    <!-- more users --> 
    </USERS> 
</APPLICATION_NAME> 

Jusqu'à présent, j'ai réussi à importer des éléments par l'instruction suivante à partir de ce site: http://edoshin.skeletonkey.com/2005/10/use_modular_xsl.html

Et voici le XSLT qui importe ces éléments, mais pas attributs:

<?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:include href="FileMaker.xslt"/> 

<xsl:template match="/"> 
    <xsl:call-template name="TABLE"> 
    <xsl:with-param name="METADATA-FIELDS"> 
     <xsl:call-template name="FIELD"> 
     <xsl:with-param name="NAME" select="'ID'"/> 
     </xsl:call-template> 
     <xsl:call-template name="FIELD"> 
     <xsl:with-param name="NAME" select="'USERNAME'"/> 
     </xsl:call-template> 
     <xsl:call-template name="FIELD"> 
     <xsl:with-param name="NAME" select="'ISADMINISTRATOR'"/> 
     </xsl:call-template> 
     <xsl:call-template name="FIELD"> 
     <xsl:with-param name="NAME" select="'LastModifiedDate'"/> 
     </xsl:call-template> 
     <xsl:call-template name="FIELD"> 
     <xsl:with-param name="NAME" select="'Registered'"/> 
     </xsl:call-template> 
    </xsl:with-param> 

    <xsl:with-param name="RESULTSET-RECORDS"> 
     <xsl:for-each select="//USER"> 
     <xsl:call-template name="ROW"> 
      <xsl:with-param name="COLS"> 
      <xsl:call-template name="COL"> 
       <xsl:with-param name="DATA" select="ID"/> 
      </xsl:call-template> 
      <xsl:call-template name="COL"> 
       <xsl:with-param name="DATA" select="USERNAME"/> 
      </xsl:call-template> 
      <xsl:call-template name="COL"> 
       <xsl:with-param name="DATA" select="ACCOUNT/ISADMINISTRATOR"/> 
      </xsl:call-template> 

       <xsl:call-template name="COL"> 
       <xsl:with-param name="DATA" select="@Registered"/> 
      </xsl:call-template> 

       </xsl:with-param> 
     </xsl:call-template> 
     </xsl:for-each> 
    </xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 

</xsl:stylesheet> 

Répondre

2

Je dois dire que je ne suis pas sûr d'avoir compris ce dont vous avez besoin ici.
Si je ne comprends - vous ne recevez pas la valeur de

<ITEM NAME="LastModifiedDate" VALUE="Fri, 05 Sep 2008 13:13:16 GMT"/> 

en utilisant

<xsl:call-template name="COL"> 
     <xsl:with-param name="DATA" select="@Registered"/> 
</xsl:call-template> 


Edit:
Si tel est le cas puis essayez d'utiliser ITEM/@ inscrit comme ainsi:

<xsl:call-template name="COL"> 
    <xsl:with-param name="DATA" select="PROPERTYBAG/ITEM[@NAME='Registered']/@VALUE"/> 
</xsl:call-template> 

vous voulez le valeur attribut de l'élément ITEM avec attribut name est égal enregistré sous l'élément PropertyBag qui est sous chaque utilisateur ...


Original:
Si tel est le cas puis essayez d'utiliser ITEM/@ inscrit comme ceci:

<xsl:call-template name="COL"> 
    <xsl:with-param name="DATA" select="ITEM/@Registered"/> 
</xsl:call-template> 

vous voulez que l'élément qui est sous chaque utilisateur ...

+0

Malheureusement, cela ne fonctionne pas non plus, donc mon problème. – Raynet

+0

Désolé pour la réponse trompeuse - réparé, voir si cela aide du tout. – Dror

+0

Merci, 'PROPERTYBAG/ITEM [@ NAME =' Enregistré ']/@ VALUE' a fait l'affaire. * soupir * Je souhaite Filemaker avait une meilleure documentation sur l'importation XML que 'nous utilisons XSLT, voir W3c pour la documentation' – Raynet

Questions connexes