04. Jupyter Notebook¶
ehemalige Veranstaltungen ia3.netz + ia3.data sowie ia4.Netz im Studiengang Interaktive Medien
(c) 2020/2021 Hochschule Augsburg - Fakultät für Informatik - Prof.Dr.Nik Klever
Aufgabe 3¶
In [1]:
%%SVG
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="140" height="170"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Cat</title>
<desc>Stick Figure of a Cat</desc>
<circle cx="70" cy="95" r="50" style="stroke:black; fill:none;"/>
<!-- eye -->
<circle cx="55" cy="80" r="5" stroke="black" fill="#339933"/>
<circle cx="85" cy="80" r="5" stroke="black" fill="#ffffff"/>
<g id="whiskers">
<line x1="75" y1="95" x2="135" y2="85" style="stroke:black;"/>
<line x1="75" y1="95" x2="135" y2="105" style="stroke:black;"/>
</g>
<use xlink:href="#whiskers" transform="scale(-1 1) translate(-140 0)"/>
<!-- ears -->
<polyline points="108 62, 90 10, 70 45, 50 10, 32 62" style="stroke:black; fill:none;"/>
<!-- mouth -->
<polyline points="35 110, 45 120, 95 120, 105 110" style="stroke:black; fill:none;"/>
<!-- nose -->
<path d="M 75 90 L 65 90 A 5 10 0 0 0 75 90" style="stroke:black; fill:#ffcccc"/>
<text x="60" y="165" style="font-family:sans-serif; font-size:14pt; stroke:none; fill:black;">Cat</text>
</svg>
Erweiterung des folgenden DOM Programms¶
In [2]:
#! /usr/bin/python
# -*- coding: utf-8 -*-
from xml.dom.minidom import parse, parseString
from xml.dom import DOMException, Node
from urllib.request import urlopen
def getChildElements(node):
elements = []
for n in node.childNodes:
if n.nodeType == Node.ELEMENT_NODE:
elements.append(n)
return elements
def getElementText(node):
return node.childNodes[0].data
class XMLasDOM():
def __init__(self,xmldocument=None,filename=None):
if xmldocument:
if xmldocument.startswith('http'):
f = urlopen(xmldocument)
xmldocument = f.read()
self.document = parseString(xmldocument)
elif filename:
self.document = parse(filename)
else:
raise ValueError("kein Argument übergeben")
self.root = self.document.documentElement
kontakteDokument = XMLasDOM(filename='kontakte.xml')
print("alle E-Mail Adressen:")
print('-'*60)
root = kontakteDokument.root
for kontakt in getChildElements(root):
for kontaktelement in getChildElements(kontakt):
if kontaktelement.tagName == 'Kontaktdaten':
for kontaktdatenelement in getChildElements(kontaktelement):
if kontaktdatenelement.tagName == 'EMail':
print(getElementText(kontaktdatenelement))
print('-'*60)
print("gesamtes Dokument:")
print('-'*60)
print(root.toxml())
alle E-Mail Adressen:
------------------------------------------------------------
Lord.Mustermann@hs-augsburg.de
Lord.Mustermann@web.de
Moritz.Lehmann@hs-augsburg.de
m.lehmann@web.de
------------------------------------------------------------
gesamtes Dokument:
------------------------------------------------------------
<Kontakte>
<Kontakt Markierung="unwichtig" Typ="kein Freund">
<Person Geburtstag="1.1.1970" Geschlecht="männlich">
<Name>Mustermann</Name>
<Vorname>Max</Vorname>
<Geburtsname/>
<Titel>Lord</Titel>
<Namenszusatz/>
</Person>
<Kontaktdaten Typ="geschäftlich">
<Adresse>
<Strasse>Unter der Brücke</Strasse>
<Hausnummer>10</Hausnummer>
<PLZ>86150</PLZ>
<Ort>Augsburg</Ort>
<Land>Bayern</Land>
<Zusatzinfo>Schwaben</Zusatzinfo>
<Postfach/>
</Adresse>
<Telefonnummer>123456789</Telefonnummer>
<Telefonnummer Typ="mobil">0190-987654321</Telefonnummer>
<EMail>Lord.Mustermann@hs-augsburg.de</EMail>
</Kontaktdaten>
<Kontaktdaten Typ="privat">
<Adresse>
<Strasse>Unter der Lechbrücke</Strasse>
<Hausnummer>2</Hausnummer>
<Plz>86150</Plz>
<Ort>Augsburg</Ort>
<Land>Bayern</Land>
<Zusatzinfo>Schwaben</Zusatzinfo>
<Postfach/>
</Adresse>
<Telefonnummer>567890</Telefonnummer>
<Telefonnummer Typ="mobil">0160-23456790</Telefonnummer>
<EMail>Lord.Mustermann@web.de</EMail>
<Notizzettel>stinkt ein bißchen</Notizzettel>
</Kontaktdaten>
<Notizzettel/>
</Kontakt>
<Kontakt Markierung="wichtig" Typ="Freund">
<Person Geburtstag="1.1.1990" Geschlecht="männlich">
<Name>Lehmann</Name>
<Vorname>Moritz</Vorname>
<Geburtsname/>
<Titel> </Titel>
<Namenszusatz/>
</Person>
<Kontaktdaten Typ="geschäftlich">
<Adresse>
<Strasse>Friedberger Str.</Strasse>
<Hausnummer>2</Hausnummer>
<Plz>86161</Plz>
<Ort>Augsburg</Ort>
<Land>Bayern</Land>
<Zusatzinfo>Schwaben</Zusatzinfo>
<Postfach/>
</Adresse>
<Telefonnummer>5586-7900</Telefonnummer>
<Telefonnummer Typ="mobil">0170-987654321</Telefonnummer>
<EMail>Moritz.Lehmann@hs-augsburg.de</EMail>
</Kontaktdaten>
<Kontaktdaten Typ="privat">
<Adresse>
<Strasse>Badstrasse</Strasse>
<Hausnummer>20</Hausnummer>
<Plz>86150</Plz>
<Ort>Augsburg</Ort>
<Land>Bayern</Land>
<Zusatzinfo>Schwaben</Zusatzinfo>
<Postfach/>
</Adresse>
<Telefonnummer>8976890</Telefonnummer>
<Telefonnummer Typ="mobil">0161-12342345</Telefonnummer>
<EMail>m.lehmann@web.de</EMail>
<Überschrift>ÄÖüß</Überschrift>
</Kontaktdaten>
<Notizzettel/>
</Kontakt>
</Kontakte>
In [10]:
#! /usr/bin/python
# -*- coding: utf-8 -*-
from xml.dom.minidom import parse, parseString
from xml.dom import DOMException, Node
from urllib.request import urlopen
def getChildElements(node):
elements = []
for n in node.childNodes:
if n.nodeType == Node.ELEMENT_NODE:
elements.append(n)
return elements
def getElementText(node):
return node.childNodes[0].data
def search(root,nachname,vorname,typ):
for kontakt in getChildElements(root):
for kontaktelement in getChildElements(kontakt):
if kontaktelement.tagName == 'Person':
for personelement in getChildElements(kontaktelement):
if personelement.tagName == 'Vorname':
vn = getElementText(personelement)
if personelement.tagName == 'Name':
nn = getElementText(personelement)
if vn == vorname and nn == nachname:
print("gefunden: ",vn,nn)
gesuchterKontakt = kontakt
for kontaktelement in getChildElements(gesuchterKontakt):
if kontaktelement.tagName == 'Kontaktdaten' and kontaktelement.getAttribute('Typ') == typ:
for kontaktdatenelement in getChildElements(kontaktelement):
if kontaktdatenelement.tagName == 'Telefonnummer' and kontaktdatenelement.getAttribute('Typ') == 'mobil':
print(getElementText(kontaktdatenelement))
if kontaktdatenelement.tagName == 'Adresse':
ausgabe = ""
for adressedatenelement in getChildElements(kontaktdatenelement):
if adressedatenelement.tagName == 'Strasse': ausgabe += getElementText(adressedatenelement) + ' '
if adressedatenelement.tagName == 'Hausnummer': ausgabe += getElementText(adressedatenelement) + ', '
if adressedatenelement.tagName == 'Plz': ausgabe += getElementText(adressedatenelement) + ' '
if adressedatenelement.tagName == 'Ort': ausgabe += getElementText(adressedatenelement)
print(ausgabe)
class XMLasDOM():
def __init__(self,xmldocument=None,filename=None):
if xmldocument:
if xmldocument.startswith('http'):
f = urlopen(xmldocument)
xmldocument = f.read()
self.document = parseString(xmldocument)
elif filename:
self.document = parse(filename)
else:
raise ValueError("kein Argument übergeben")
self.root = self.document.documentElement
kontakteDokument = XMLasDOM(filename='kontakte.xml')
print("alle E-Mail Adressen:")
print('-'*60)
root = kontakteDokument.root
for kontakt in getChildElements(root):
for kontaktelement in getChildElements(kontakt):
if kontaktelement.tagName == 'Kontaktdaten':
for kontaktdatenelement in getChildElements(kontaktelement):
if kontaktdatenelement.tagName == 'EMail':
print(getElementText(kontaktdatenelement))
print('-'*60)
print("Search: Lehmann, Moritz, privat")
#print('-'*60)
search(root,'Mustermann','Max','privat')
alle E-Mail Adressen: ------------------------------------------------------------ Lord.Mustermann@hs-augsburg.de Lord.Mustermann@web.de Moritz.Lehmann@hs-augsburg.de m.lehmann@web.de ------------------------------------------------------------ Search: Lehmann, Moritz, privat gefunden: Max Mustermann Unter der Lechbrücke 2, 86150 Augsburg 0160-23456790