Importare fisier XML

In acest exemplu, vedem cum este importat un fisier XML si cum se scriu datele in baza de date folosind obiecte datarow pentru a simplifica operatia. Mai exact, vom crea un mic importator de articole. Script-ul este o actiune care trebuie asociata direct cu programul.

Grup ScriptEveniment
ProgramActiune program
document = program.loadxmldocument()
if document == nil then
        do return end
end

Mai intai cream un obiect document care va contine intregul fisier XML. Daca parcursul nu este introdus intre paranteze, programul va afisa ecranul de selectare a fisierelor. Aceasta operatie variaza in functie de tipul de sistem de operare deoarece, fiecare are propriile sale reguli de gestionare a fisierelor.

headitems = document.getelementbyname("Items")
if headitems == nil then
        program.showerror("Error in xml (Items) .Unable to continue!")
        do return end
end

Extragem primul nod al fisierului XML. Desigur, trebuie sa stim cum se numesc diferitele noduri si, daca este solicitat un nod care nu exista, programul va afisa null si va iesi.

items= headitems.getelementbyname("Elenco")

Extragem sub-nodul care contine toate articolele.

for i,row in pairs(items) do
        code= row.getelementbyname("Code").getvalue()
        titems= database.getsql("SELECT * FROM items WHERE code='" .. code .. "'")
        if titems.countrows() ~= 0 then
               rowitem = titems.getrows()[1]
        else
               rowitem= database.newdatarow("items")
        end
        rowitem.setvalue("description",row.getelementbyname("Description").getvalue())
        rowitem.setvalue("price",tonumber(row.getelementbyname("Price").getvalue()))
        if rowitem.save() == false then
               program.showerror(errorn.errormessage)
               do return end
        end
end

Rasfoim toate articolele si, cu ajutorul codului, verificam daca acesta din urma este deja prezent in baza de date sau nu. Daca nu, vom crea un rand nou.

Ca ultim pas, recuperam valorile dorite din fisierul XML si salvam randul.