Topics   All   Mac OS X (Only)   Windows (Only)   Linux (Only, Not)   iOS (Only, Not)  
Components   Crossplatform Mac & Win   Server (Not)   Client   Old   Guides   Examples
New in version: 6.0   6.1   6.2   6.3   6.4   6.5   7.0   7.1   7.2   7.3    Statistic  

XML.Import

Imports XML and creates tables, fields and records.

Component Version macOS Windows Server FileMaker Cloud FileMaker iOS SDK
XML 5.3 Yes Yes Yes Yes Yes

MBS( "XML.Import"; XML; InsertFileName { ; TableNamePrefix; Flags } )

Parameters

Parameter Description Example value
XML The XML data to import.
InsertFileName The file name of where the insert table is inside. Can be empty. Get(FileName)
TableNamePrefix Optional
The prefix to put in front of all tables.
"Import"
Flags Optional
Sum of flags.
Pass 1 to ignore errors in xml and continue parsing.
Pass 2 to ignore outer XML wrapper nodes.
Pass 4 to import flat, so no subtables for included nodes.
Pass 8 to convert CDATA to text nodes. CData should contain ASCII or UTF-8 text!
Pass 16 to trim values.
0

Result

Returns number or error.

Description

Imports XML and creates tables, fields and records.
This function can import any XML into FileMaker tables with all fields and attributes.
Returns number of records to be added. This function prefers the import and runs it later at idle time. In a script please call XML.Import and than loop and do script pauses. Than use XML.Import.Status to check regularly for updates. When you get back Finished as status, the script can continue with other work.

If you have a XML file you need to import regularly into FileMaker and you have no XLST to transform it for FileMaker, you can use this plugin function. On the first run, it creates for a sample xml file the required tables and fields. Than you can define any layout or script to process values, e.g. copy into your tables. On further runs the plugin may add more fields (if newer xml file has more fields) and import newer records.

All tables have three default fields. _RecordUUID is an unique identifier for the record. _ParentRecordUUID provides a link to the record one level higher in the XML. This can be used to find child/parent records. The _CreationTimeStamp is the creation date, so you can distinguish different imports.

As a lot of records with a lot of data is imported and you may not need everything, you may want to put the imports in an extra FileMaker file. You decide if you clear tables before import or you want to keep history of all imports.

If the XML has errors like a missing < in the xml, you get an error. If you switch on IgnoreError parameter, the plugin reads everything until the error is reached which may give less records than possible.

This function works at idle time which is currently (FM 14) not supported on server.

Requires FileMaker 12 or newer.
See also XML.Import.SetBaseFields and XML.Import.SetExtraField.

Examples

Imports test.xml into FileMaker:

Set Variable [$text; Value:MBS("Text.ReadTextFile"; "/Users/cs/Desktop/test.xml"; "UTF-8")]
Set Variable [$r; Value:MBS("XML.Import"; $text; ""; "")]
Set Variable [$text; Value:""]
If [MBS("IsError") = 0]
    Set Variable [$total; Value:MBS("XML.Import.Total")]
    Loop
        Set Variable [$todo; Value:MBS("XML.Import.Todo")]
        Pause/Resume Script [Duration (seconds): 1]
        Set Variable [$s; Value:MBS("XML.Import.Status")]
        Exit Loop If [$s ≠ "Working"]
    End Loop
    Show Custom Dialog ["XML Import"; $r & " " & $s]
End If

Import script with progress bar for importing XML with Windows ANSI encoding:

Go to Layout [“XML Import” (Import2Row)]
Delete All Records [No dialog]
Set Variable [$r; Value:MBS("ProgressDialog.SetBottomText"; "")]
Set Variable [$r; Value:MBS("ProgressDialog.SetTopText"; "Importiere XML")]
Set Variable [$r; Value:MBS("ProgressDialog.SetTitle"; "Import...")]
Set Variable [$r; Value:MBS("ProgressDialog.SetButtonCaption"; "Abbrechen")]
Set Variable [$r; Value:MBS("ProgressDialog.SetProgress"; -1)]
Set Variable [$r; Value:MBS("ProgressDialog.Show")]
Pause/Resume Script [Duration (seconds): ,1]
Set Variable [$text; Value:MBS("Text.ReadTextFile"; "/Users/cs/Desktop/test.xml"; "Windows")]
Set Variable [$r; Value:MBS("XML.Import"; $text; ""; "Import2")]
Set Variable [$text; Value:""]
If [MBS("IsError") = 0]
    Set Variable [$total; Value:MBS("XML.Import.Total")]
    Loop
        Set Variable [$todo; Value:MBS("XML.Import.Todo")]
        Set Variable [$r; Value:MBS("ProgressDialog.SetProgress"; ($total - $todo) * 100 / $total)]
        Set Variable [$r; Value:MBS("ProgressDialog.SetBottomText"; "Schritt " & ($total - $todo) & " von " & $total)]
        Pause/Resume Script [Duration (seconds): 1]
        Set Variable [$s; Value:MBS("XML.Import.Status")]
        Exit Loop If [$s ≠ "Working"]
        If [MBS("ProgressDialog.GetCancel") = 1]
            Set Variable [$r; Value:MBS("ProgressDialog.Hide")]
            Set Variable [$r; Value:MBS("XML.Import.Cancel")]
            Exit Script []
        End If
    End Loop
    Set Variable [$r; Value:MBS("ProgressDialog.Hide")]
    Show Custom Dialog ["XML Import"; $r & " " & $s]
End If
Set Variable [$r; Value:MBS("ProgressDialog.Hide")]

Read Database Design Re

#read XML from file in UTF-16
Set Variable [$text; Value:MBS("Text.ReadTextFile"; "/Users/cs/Desktop/test.xml"; "UTF-16")]
# now remove the UTF-16 encoding marker
Set Variable [$text; Value:Substitute($text; "<?xml version=\"1.0\" encoding=\"UTF-16\"?>"; "")]
#read XML from file
Set Variable [$r; Value:MBS("XML.Import"; $text; ""; "Import")]

See also

Example Databases


XML.HasAttribute   -   XML.Import.Cancel

Feedback: Report problem or ask question.




Links
MBS Xojo PDF Plugins