04. Jupyter Notebook

ehemalige Veranstaltungen ia3.netz + ia3.data sowie ia4.Netz im Studiengang Interaktive Medien

(c) 2020 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>
Cat Stick Figure of a Cat Cat

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