es3 fájl kibontása automatikusan

Fórumok

Sziasztok,

es3 (Microsec-es) kiterjesztésű fájlokat szeretnék automatikusan kibontani Centos alatt.

Van esetleg erre egy kipróbált megoldás?

 

Köszönöm

Hozzászólások

Szerintem írj rá Python script-et.

Amelyet egy shell script indít, amiben AWK-val keresel az es3-ban, az eredményt Perl-lel csócsálod a Pythonnak való átadás előtt, amely Python visszaadott eredményét egy PHP-script hozza megfelelő formára.

Esetleg kis JS még befigyelhetne.

Mit jelent a "kibontas" egy tomoritetlen XML eseten? A benne levo, base64 encode-olt dolgokat szeretned kulon-kulon file-ba tenni, es valamivel feldolgozni?

A mar emlitett python nem eleg? (van xml-hez, file-hoz, meg base64-hez is modul)

When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Pontosan amit leírtál. Elvileg több fájl is lehet az es3-ban és azokat szeretnénk kicsomagolva látni és használni. Mindezt a háttérben, nem az e-signos programmal.

 

Így néz ki az eleje:

<es:Format>
    <es:MIME-Type type="application" subtype="pdf" extension="pdf"/>
    </es:Format>
    <es:SourceSize sizeValue="8243" sizeUnit="B"/>
    <es:BaseTransform>
    <es:Transform Algorithm="zip"/>
    <es:Transform Algorithm="base64"/> 

from lxml import etree
import base64

x=etree.parse('/media/12T/nyos/3trol/ment/es3ak/vegzes.es3')
nss={'es':'https://www.microsec.hu/ds/e-szigno30#','ds':'http://www.w3.org/2000/09/xmldsig#'}
#docs=x.xpath('//es:Documents/es:Document[es:DocumentProfile]',namespaces=nss)
b64=base64.decodestring(x.xpath('//ds:Object',namespaces=nss)[3].text.encode('utf-8'))
with open('/tmp/test.zip','wb') as f:
  f.write(b64)

Kerestem egy es3-at a gepemen, inditottam egy python3 interpretert (interaktiv modban), aztan elkezdtem vele jatszani.

Eloszor tisztessegesen elkezdtem bejarni a DOM-ot, ugyanis van egy es:Documents tag, azon belul vannak a es:Document tag-ek, es annak vannak mindenfele node-jai (es:Title, meg amiket irtal, es:Format, stb..), es ami a lenyeg: a ds:Object, amiben maga a base64 enkodolt adat van.

Aztan nem akartam bonyolitani, es inkabb kivalasztottam az egyik objectet, base64 decode-oltam, es kiirtam file-ba a tartalmat. Ez egy zip, amit kibontva kaptam egy nagyon ronda nevu (A l├йtes├нt┼С okirat - v├бltoz├бsokkal egybefoglalt - hat├бlyos├нtott sz├╢vege.pdf) PDF-et. Utobbi a zipfile modullal is kibonthato, de ezzel mar nem akarok tokolni.

Az xpath fuggveny a fenti kodban amugy egy listat ad meg, amin forral vegig lehet menni ugye.. szoval nem egy varazslat mindent kinyerni a file-bol. es:MIME-Type alapjan el lehetne agazni, es es:Transform alapjan meg lehet hivni a zipes kibontast is. Alapvetoen kb. ennyi xml-t kezelni (ezt persze kb. minden modern nyelv tudja, szoval ha a C#/PHP/akarmi jobban tetszik, akkor hajra azzal).

When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin