generando in sicurezza XML in Lua
Domanda
Sto scrivendo un'applicazione Lua che genera un feed Atom. In questo momento, sto generando XML "a mano" -. Stringhe scrittura di file
Questo non sembra il modo migliore, anche se può essere. Io sono sempre nervoso di avere la fuoriuscita esattamente a destra. Qualcuno ha fatto niente di simile in Lua prima?
Devo restare con la generazione "a mano"? O scrivere un wrapper per una libreria C esistente?
(Perl, al confronto, sembra avere una pletora di opzioni .)
Soluzione 2
ora ho una risposta più alla mia domanda: ho scritto attacchi Lua per C generatore XML di Tim Bray, Genx .
Ecco il suo homepage ; ecco la progetto su Bitbucket . Si tratta di una associazione incompleta in questo momento, ma funziona per compiti semplici:
require 'genx'
d = genx.new(io.stdout)
d:startElement('farm')
d:startElement('crop')
d:attribute('type', 'fruit')
d:text('Apricots')
d:endElement()
d:startElement('crop')
d:attribute('type', 'vegetable')
d:text('Zucchini')
d:endElement()
d:endElement()
produce:
<farm><crop type="fruit">Apricots</crop><crop type="vegetable">Zucchini</crop></farm>
Personalmente, trovo questo tipo di "streaming" interfaccia un po 'più bello di lavorare con un'interfaccia di albero-based per la generazione.
Altri suggerimenti
Ho generato XML a mano troppo. Ho creato un'API che assomiglia a:
function XmlElement(tag, text, attr)
...
end
function XmlSubelement(root, tag, text, attr)
...
end
Poi usarlo:
local root = XmlElement("Level0")
XmlSubelement(root, "Level1", "some text")
XmlSubelement(root, "Level1", "some more text")
local s = root:tostring()
Non ho il codice più a lungo, ma stare su uno schermo tra cui la citazione.
Ci sono varie librerie di dati di persistenza per Lua così, molti sono descritti al wiki del Lua utente . Il pagina su XML ha informazioni che potrebbero aiutare.
La bella gente sopra a progetto Keplero hanno generatori per HTML che possono essere utilizzati per generando XML valido. (Dead link.)
C'è anche Cosmo che è un quadro modello generalizzato che può essere utilizzato per generare XML (tra l'altro cose).
Modifica
Capisco la preoccupazione per i modelli non necessariamente offrono garanzie che l'uscita rimane ben formati. Sono abbastanza sicuro che di Cosmo gli autori sarebbero infelici se un modello ben formato mai prodotto un documento mal-formato, ma c'è ancora il problema di citare correttamente il contenuto. Nei contesti in cui l'ho usato, questo non è stato un problema per me, ma anche io non sono state lavorando da testo di origine non attendibile.
Ci sono anche progetti iscritti al LuaForge che possono essere utili:
-
Lua Elemento Albero mappe un documento XML da e verso un albero di tabelle. Esso utilizza Expat per la lettura, e sostiene di generare valide XML durante la scrittura.
-
LuaSOAP Include la generazione di XML e l'analisi sufficienti per le transazioni SOAP. Se si decide di scrivere il proprio generatore, questo potrebbe essere un buon punto di partenza per un dialetto limitata, come RSS o Atom.
Inoltre, so che ho visto un progetto che ha implementato un DOM completo per i documenti HTML e sostenuto sia l'analisi e documenti generazione, ma non riesco a ricordare il suo nome o individuarlo oggi al LuaForge.
Modifica 2: Ecco un altro pacchetto che non avevo notato prima, anche se è incluso in Lua per Windows : LuaXML . Si associa tra XML e nido di tavoli Lua, e può leggere e scrivere XML.