Sida 1 av 1

Skapa XML strukturer.

Postat: 28 maj 2011, 14:18:05
av sodjan
Jag har letat lite efter verktyg för att skapa XML filer från "flata filer". Helst något
som körs inom Python, eftersom jag har tillgång till en bra Python miljö. Det mesta
som jag har hittat handlar om att läsa/tolka XML och göra om det till standard
Python strukturer. Jag vill gå andra vägen.

Visst, XML är "bara text" så man kan ju alltid hårdkoda allt och bara skriva ut det
som en textfil (med XML data), men å andra sidan har jag tillgång till en XSD som
beskriver det önskade formatet och tycker (jag vet inte så himla mycket om detta)
att det borde finnas verktyg som man matar med en XSD för att får grundstrukturen
och sedan kör man på med data för objektet och, hoppla, ut kommer XML filen !

Det ska hur som helst vara en XML fil till slut som ska mailas. Idag skickas den flata
filen med poster via mail, men mottagaren kväver/önskar att få det som XML.
Det är även mottagaren som har specificerat formatet via XSD filen.

Jag har kollat på verktyg som t.ex :

http://lxml.de/
http://pypi.python.org/pypi/PySimpleXML/1.0
http://xmlsoft.org/python.html

men, som sagt, mycket där handlar om att *läsa* XML från Python
och jag vill skriva XML från Python...

Annars får det bli de där funktionerna för att skapa mallar med placeholders (minns inte
vad det kallades) för data som ersätts med en funktion/metod ( ".subs" tror jag det var).
Det blir rellativt flexibelt...

Re: Skapa XML strukturer.

Postat: 1 juni 2011, 22:32:06
av Sunken
http://lxml.de/tutorial.html

där skapar dom sin egen struktur. Att använda en XSD som "template" är lite motsägelsefullt, eftersom dom (teoretiskt) innehåller strukturer som inte måste men kan vara med. Dessutom definierar XSDn inte vad som ska stå i datafälten.

Mitt förslag vore alltså att skapa strukturen i python och fylla den med data från textfilen, och sen köra den mot XSDn för att verifiera att den är schemakonform.

Kan rekommendera lxml, den är runt 10 gånger snabbare än minidom och har ett bättre (mer python-konformt) gränssnitt.

Re: Skapa XML strukturer.

Postat: 1 juni 2011, 22:51:20
av labmaster
Hej Sodjan!

Jag brukar alltid använda php för detta ändamål. Det tar inte mer än några minuter att skapa ett program som gör jobbet så det blir ganska bra timpenning eftersom kunden betalar för värdet av insatsen inte tiden det tar att skapa programmet.

Re: Skapa XML strukturer.

Postat: 1 juni 2011, 23:12:15
av sodjan
PHP ingår inte i verktygslådan. Eller, ja, jag skulle kunna installerade det,
man har inte för avsikt att göra det. Python har en bra och smidig port till
den aktuella miljön (OpenVMS) och det är där det ska köras.

Jag har sedan jag postat noterad att jag har misstolkat XSD något. Det verkar
som Sunken säger mer vara för verifiering än att för att skapa XML i sig.

> Kan rekommendera lxml,

Jag har kollat på några av de verktyg som finns, och speciellt ElementTree
i lxml och det blir antinget något sådant, eller helt vanlig hårdkodad
utskrift av XML strukturerna genom vanlig stränghantering.

Fråga, hur är det generellt ? Måste man skapa hela strukturen (hela XML filen)
i strukturer i minnet först innan man skriver till en fil ? Eller kan man skriva
till en fil eftersom man skapar XML'en ? Det kan vara tiotusentals rader i
textfilen där varje rad var för sig kanske skapar 10-20 rader XML kod.

> Dessutom definierar XSDn inte vad som ska stå i datafälten.

Nja, i alla fall datatyper, min/max länger o.s.v finns väl med !?

Re: Skapa XML strukturer.

Postat: 1 juni 2011, 23:27:02
av labmaster
Sodjan, xml är nästan en del av min vardag och jag brukar använda xml-strukturer i alla möjliga tillämpningar eftersom det är så otroligt smidigt.

Det är väldigt enkelt att generera en xml-struktur. Du behöver inte lagra strukturen i minnet och du kan använda vilket programspråk som helst. Det går utmärkt att använda vanliga strängvariabler för att generera element i strukturen.

Det är ungefär vad jag kan åstadkomma som råd just nu när jag inte varken sett indata som efterfrågad xml-struktur. Möjligen finns det en sak till som jag kan tipsa om och det är: krångla inte till det, gör det så enkelt som möjligt.

Re: Skapa XML strukturer.

Postat: 1 juni 2011, 23:37:25
av sodjan
Eftersom jag jobbar under NDA med kunden, så kan jag inte posta
data eller mer info än det jag har gett hittills. Däremot så kan du,
om du är intresserad, gärna få se materialet privat. Det jag vill ha
är en muntlig/mail överenskommelse om att inte sprida det vidare.
Jag kan även tänka mig ersättning för en eller ett par timmars hjälp.

Filen/strukturen är rellativt simpel så jag gissar att om man är
"fluent" i XML så är det ganska enkelt igentligen...

Maila mig om det finns intresse.

Re: Skapa XML strukturer.

Postat: 2 juni 2011, 00:00:29
av Sunken
Så vitt jag vet finns det ingen färdig "inkrementell" funktionalitet i lxml, men varje objekt kan direkt göras till text. Man måste alltså inte nödvändigtvis skapa hela strukturen direkt. Är dock enklare ur programmeringssikt, eftersom man då inte måste bry sig om "kapslingen" av dom enstaka elementen. Har du så ont om minne?

Re: Skapa XML strukturer.

Postat: 2 juni 2011, 10:49:04
av labmaster
Jag har mailat dig Sodjan, hör av dig så jag vet att det kom fram.

Re: Skapa XML strukturer.

Postat: 2 juni 2011, 12:15:01
av sodjan
Sunken, nej, det är väl i princip inte ont om minne.
Däremot så är det lite enklare med en lösning som har
ett fast resursbehov (t.ex minne) avsett hur datat som
bearbetas ser ut.

labmaster, har just svarat på ditt mail... :-)