Posts tagged ‘XML’

Mit Python XML Tags aus XML-Dateien löschen

Kürzlich musste ich XML-Tags aus XML-Dateien löschen, um die entsprechenden XML-Dateien etwas übersichtlicher zu gestalten. Der richtige Weg wäre sicher gewesen, einen XSLT-Prozessor zu nutzen, der die entsprechenden Tags ausfiltert, aber mangels Zeit habe ich dann doch ein kleines Python-Skript gebaut. Die zu entfernenden Tags hatten auch keine Properties und ließen sich daher gut entfernen.

def filter(oldfile, newfile, filterStart, filterEnd):
    killFlag = 0
    with open(newfile, 'w') as outfile, open(oldfile, 'r', encoding='utf-8') as infile:
        for line in infile:
            strIndex = line.find(filterStart)
            if (strIndex > -1) | (killFlag == 1):
                killFlag = 1
            else:
                outfile.write(line)
                strIndex2 = line.find(filterEnd)
                if (strIndex2 > -1):
                    killFlag = 0
 
filter('somexmlfile.xml', 'somefilteredxml.xml', '<xs:annotation>', '</xs:annotation>')

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination.

Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

XML Feeds parsen mit Python

Hier ein kurzes Beispiel, wie man mit Python XML Dateien parsen kann. Yahoo Developer hatte dazu einen guten Artikel. Der Datensatz der ECB ist zwar ziemlich doof, da hier mehrere CUBE Tags ineinander verschachtelt sind, dies stellt mit der hier genutzten Herangehensweise kein Hindernis dar.

import xml.etree.ElementTree as ET
import urllib2
 
root = ET.parse(urllib2.urlopen('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml')).getroot()
 
for child in root[2][0]:
    #print child.tag
    #print child.attrib
    curr = child.get('currency')
    rate = child.get('rate')
    print curr, rate

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination.

Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mindmaps aus Freemind nach LaTeX exportieren – Teil 2

Dies ist der zweite Teil der Reihe, Teil 1 liegt unter http://uweziegenhagen.de/?p=2032.

Schauen wir uns mal den Aufbau der FreeMind Datei an:

<map version="0.9.0">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1335794057887" ID="ID_1245350673" MODIFIED="1335794109247" TEXT="Zentrum">
<node CREATED="1335794071208" ID="ID_1530114542" MODIFIED="1335794074163" POSITION="right" TEXT="Level 1"/>
<node CREATED="1335794075246" ID="ID_1662348218" MODIFIED="1335794079639" POSITION="right" TEXT="Level 1">
<node CREATED="1335794081307" ID="ID_1399980217" MODIFIED="1335794085467" TEXT="Level 2">
<node CREATED="1335794088715" ID="ID_1065307715" MODIFIED="1335794091703" TEXT="Level 3">
<node CREATED="1335794092827" ID="ID_1370145863" MODIFIED="1335794094989" TEXT="Level 4">
<node CREATED="1335794096421" ID="ID_9970207" MODIFIED="1335794099648" TEXT="Level 5">
<node CREATED="1335794173930" ID="ID_919041832" MODIFIED="1335794177008" TEXT="Level 6">
<node CREATED="1335794178164" ID="ID_1274260836" MODIFIED="1335794180516" TEXT="Level 7"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</map>

Es gibt ein map Tag, das entsprechende verschachtelte node Tags enthält. Wenn ein node Tag keine „Kinder“ hat, wird es am Ende der Zeile mittels „/“ geschlossen. node Tags mit „Kindern“ enthalten diese nodes und werden dann rekursiv geschlossen.

Schauen wir uns mal das XSLT an (Eine tiefgehende Einführung in XSLT kann ich hier jedoch nicht geben): Hinter dem Matching auf das map Tag wird die Text Eigenschaft des ersten node-Elements als part ausgegeben. Sehr interessant, an dieser Stelle können wir später ansetzen, um direkt ein kompilierbares LaTeX-Dokument zu erhalten.

Es gibt im Dokument noch drei weitere Matches:

  • richcontent
  • soll uns aktuell nicht interessieren, wird eventuell später mal behandelt.

  • node
  • Hier wird die Ausgabe der einzelnen node Tags gesteuert.

  • text
  • Dieses match steuert die Ausgabe der Notizen als einfachen Text, gehe ich eventuell später mal drauf ein.

In den node matches wird geschaut, wie tief sich der aktuelle Knoten befindet, in Abhängigkeit dessen wird das Text Attribut des Knotens einfach in ein entsprechendes LaTeX-Kommando eingebettet. Entsprechende Abschnitte wie den folgenden finden sich für alle Levels von \chapter bis \subparagraph.

Im nächsten Teil werden wir dieses XSLT Sheet auf unsere Bedürfnisse anpassen.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination.

Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website

Mindmaps aus Freemind nach LaTeX exportieren – Teil 1

FreeMind ist meines Erachtens das beste OpenSource Tool für die Erstellung von Mindmaps, jedoch ist eine MindMap oft nicht das Format, das man zum Weiterbearbeiten benötigt. Neben diversen fertigen Export-Filtern für Grafikformate wie PDF oder PNG bietet FreeMind auch die Möglichkeit, eigene XSLT-Sheets für den Export zu nutzen. Das Rad muss man hier nicht komplett neu erfinden, mit Freemind to Latex gibt es schon ein entsprechendes Projekt, das eine passende XSLT Datei bereitstellt. Möchte man eine Mindmap exportieren, so geht man im „Datei“ Menü einfach auf den Export => „Mittels XSLT“ Eintrag und kann dann den Namen der Output Datei sowie das zu nutzende XSLT Sheet auswählen.

Mit der standardmäßigen mm2latexr_richcontent_v1.02.xsl erhält man für die Map aus dem Bild folgendes Ergebnis:

\part{Zentrum}
 
 
 
\chapter{Level 1}
\chapter{Level 1}
\section{Level 2}
\subsection{Level 3}
\subsubsection{Level 4}
\paragraph{Level 5}
\subparagraph{Level 6}

Man sieht:

  • Es fehlen Dokumentenpräambel und -struktur
  • Es wird nur bis Level 6 exportiert, danach fehlen die Inhalte (Laut der Webseite sollten eigentlich itemize Umgebungen daraus werden…)

Mit ein wenig XML/XSLT Kenntnissen lässt sich dieser Export aber sehr einfach auf die eigenen Bedürfnisse anpassen, was ich in Teil 2 zeigen werde.

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination.

Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website