XML Datei mit Gif-Bild in Base64 Kodierung, decodieren und als Gif speichern, Name der Datei sollte ein inhalt aus der XML sein
Einen sonnigen Nachmittag Zusammen,
es ist schon ziemlich Warm heute und mein Hirn brutzelt mit dahin.
Was programmieren und Scripten angeht, bin ich noch ziemlich am Anfang, lese mich aber gerne ein und versuche mich gern an neuen Herausforderungen.
Aber nun Erstmal zu meinem Problem:
Ich hab eine menge Verschlagworteter gescannter Belege, diese liegen mir als XML Dateien Vor, die alle in eine DMS (läuft auf einem Win2012 R2) hinein sollen.
--
Zu erst dachte ich, es wäre am einfachsten alle werte der XML per VBS in die SQL2014 Datenbank direkt zu speichern und dann schauen ob der DMS Viewer den Base64 Kode decodieren und Grafisch darstellen kann. Aber dieser Gedanke wird vom Hersteller nicht supportet, da ich nur Daten mit den Bordmitteln in die DMS laden darf soll. Also müll.
Nun bin ich offen für Vorschläge für Folgende Überlegung.
Die XML nehmen, den Base64 Kode decocen als gif Datei speichern in einen bestimmten Pfad mit dem Wert zwischen <SdgNr></SdgNr> als Datei Namen.
Und das ganze am besten automatisch sobald eine oder mehre XML Dateien im Ordner auftauchen.
Ich weiß Ihr schwitzt alle genauso, außer wenn ihr ein wunderschön klimatisiertes Büro euer eigen nennen dürft ^^
Aber vllt. hat einer eine Idee oder bringt mich auf den richtigen Pfad der Erleuchtung.
So sieht der Inhalt der XML aus:
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <Dokument>
<DateTime>01.12.2014 07:14:11</DateTime>
<PosNr></PosNr>
<LongNr></LongNr>
<Typ>0</Typ>
<SdgNr>0007777777</SdgNr>
<Est>00000</Est>
<Ast>00000</Ast>
<Freidatum>31.12.1899 00:00:00</Freidatum>
<Referenz />
<Absname>Donald Duck</Absname>
<Absstr>Entenweg 3</Absstr>
<Absplz>6666</Absplz>
<Absland>DE</Absland>
<Absort>Entenhausen</Absort>
<Empname>Max Mustermann</Empname>
<Empstr>Musterstraße 1</Empstr>
<Empplz>9999</Empplz>
<Empland>DE</Empland>
<Emport>Musterstadt</Emport>
<Kdnnr />
<Kdnname />
<Kdnstr />
<Kdnplz />
<Kdnland />
<Kdnort />
<Gewicht>69</Gewicht>
<Anzahl>2</Anzahl>
<VPArt />
<NVE></NVE>
<Zustellstati>False</Zustellstati>
<Unterzeichner />
<Zugestelltzeit>01.12.2014 07:14:10</Zugestelltzeit>
<Datei> Hier steht der Base64 Code </Datei>
<DateiTyp>.gif</DateiTyp>
</Dokument>
Ich sag schon mal Danke für jeden input
Grüße Matze
es ist schon ziemlich Warm heute und mein Hirn brutzelt mit dahin.
Was programmieren und Scripten angeht, bin ich noch ziemlich am Anfang, lese mich aber gerne ein und versuche mich gern an neuen Herausforderungen.
Aber nun Erstmal zu meinem Problem:
Ich hab eine menge Verschlagworteter gescannter Belege, diese liegen mir als XML Dateien Vor, die alle in eine DMS (läuft auf einem Win2012 R2) hinein sollen.
--
Zu erst dachte ich, es wäre am einfachsten alle werte der XML per VBS in die SQL2014 Datenbank direkt zu speichern und dann schauen ob der DMS Viewer den Base64 Kode decodieren und Grafisch darstellen kann. Aber dieser Gedanke wird vom Hersteller nicht supportet, da ich nur Daten mit den Bordmitteln in die DMS laden darf soll. Also müll.
Nun bin ich offen für Vorschläge für Folgende Überlegung.
Die XML nehmen, den Base64 Kode decocen als gif Datei speichern in einen bestimmten Pfad mit dem Wert zwischen <SdgNr></SdgNr> als Datei Namen.
Und das ganze am besten automatisch sobald eine oder mehre XML Dateien im Ordner auftauchen.
Ich weiß Ihr schwitzt alle genauso, außer wenn ihr ein wunderschön klimatisiertes Büro euer eigen nennen dürft ^^
Aber vllt. hat einer eine Idee oder bringt mich auf den richtigen Pfad der Erleuchtung.
So sieht der Inhalt der XML aus:
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <Dokument>
<DateTime>01.12.2014 07:14:11</DateTime>
<PosNr></PosNr>
<LongNr></LongNr>
<Typ>0</Typ>
<SdgNr>0007777777</SdgNr>
<Est>00000</Est>
<Ast>00000</Ast>
<Freidatum>31.12.1899 00:00:00</Freidatum>
<Referenz />
<Absname>Donald Duck</Absname>
<Absstr>Entenweg 3</Absstr>
<Absplz>6666</Absplz>
<Absland>DE</Absland>
<Absort>Entenhausen</Absort>
<Empname>Max Mustermann</Empname>
<Empstr>Musterstraße 1</Empstr>
<Empplz>9999</Empplz>
<Empland>DE</Empland>
<Emport>Musterstadt</Emport>
<Kdnnr />
<Kdnname />
<Kdnstr />
<Kdnplz />
<Kdnland />
<Kdnort />
<Gewicht>69</Gewicht>
<Anzahl>2</Anzahl>
<VPArt />
<NVE></NVE>
<Zustellstati>False</Zustellstati>
<Unterzeichner />
<Zugestelltzeit>01.12.2014 07:14:10</Zugestelltzeit>
<Datei> Hier steht der Base64 Code </Datei>
<DateiTyp>.gif</DateiTyp>
</Dokument>
Ich sag schon mal Danke für jeden input
Grüße Matze
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 308025
Url: https://administrator.de/contentid/308025
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Matze,
das ist schnell gemacht. Hier ein funktionsfähiges Beispiel mit Powershell das einen Ordner auf neue XML-Dateien überwacht, daraus die Infos extrahiert den Base64 kodierten String dekodiert und als Datei mit dem Namen aus dem Attribut SgdNr. und der Dateierweiterung aus dem Attribut DateiTyp in einem frei wählbaren Ordner erstellt.
Anzupassen sind im Kopf der Ordner der überwacht werden soll und der Zielordner für die Bilder. Dann startest du das Skript und erst dann wirfst so eine XML-Datei in den Ordner. Das Bild wird dekodiert und im Bilderpfad gespeichert.
Das ganze lässt sich natürlich auch mit jeder anderen halbwegs vernünftigen Programmiersprache umsetzen.
Aber es zeigt mal wieder wie flexibel und vielseitig Powershell dank dem .NET-Framework nutzbar ist.
Hoffe das wirkt jetzt trotz der Hitze ein bisschen wie kühles Eis auf deiner Stirn
Grüße Uwe
das ist schnell gemacht. Hier ein funktionsfähiges Beispiel mit Powershell das einen Ordner auf neue XML-Dateien überwacht, daraus die Infos extrahiert den Base64 kodierten String dekodiert und als Datei mit dem Namen aus dem Attribut SgdNr. und der Dateierweiterung aus dem Attribut DateiTyp in einem frei wählbaren Ordner erstellt.
Anzupassen sind im Kopf der Ordner der überwacht werden soll und der Zielordner für die Bilder. Dann startest du das Skript und erst dann wirfst so eine XML-Datei in den Ordner. Das Bild wird dekodiert und im Bilderpfad gespeichert.
# Ordner in dem die XML-Dateien erwartet werden
$folderSource = 'C:\Daten\XML'
# Ordner in den die Bilder kopiert werden
$folderDestination = 'D:\Bilder\gifs'
# Überwachungsfilter
$filter = '*.xml'
#Eventuell laufenden Subscriber beenden
Get-EventSubscriber -SourceIdentifier XMLCreated -EA SilentlyContinue | Unregister-Event -Force
$fsw = New-Object IO.FileSystemWatcher $folderSource, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
Register-ObjectEvent $fsw Created -SourceIdentifier XMLCreated -Action {
$fullpath = $Event.SourceEventArgs.FullPath
$timeStamp = $Event.TimeGenerated
Write-Host "Neue XML-Datei: '$fullpath' wurde um '$timeStamp' erstellt." -F green
try{
# XML-Datei als Objekt einlesen
$xml = New-Object XML ; $xml.Load($fullpath)
# neuer Pfad für die Bilddatei aus den Attributen in der XML-Datei zusammensetzen
$imagepath = "$folderDestination\$($xml.Dokument.SdgNr)$($xml.Dokument.Dateityp)"
write-host "Extrahiere Bild aus der XML-Datei nach: '$imagepath'" -F Green
# Base64 dekodieren und in Datei schreiben
[System.IO.File]::WriteAllBytes($imagepath,[System.Convert]::FromBase64String($xml.Dokument.Datei))
}catch{
write-host "Error: $($_.Exception.Message)" -F Red
}
}
cls
write-host "Warte auf neue XML-Dateien im Ordner: '$folderSource' ..."
while($true){
sleep 1
}
Aber es zeigt mal wieder wie flexibel und vielseitig Powershell dank dem .NET-Framework nutzbar ist.
Hoffe das wirkt jetzt trotz der Hitze ein bisschen wie kühles Eis auf deiner Stirn
Grüße Uwe