Arbeiten mit MSXML 3.0

(Auszug aus "Python & XML" von Christopher A. Jones & Fred L. Drake, Jr.)

Diese Seite konzentriert sich auf Techniken beim Einsatz des XML-Parsers MSXML (Microsoft XML Core Services) 3.0 von Microsoft mit Python. Wenn Sie mit XML auf der Windows-Plattform arbeiten, ist es wahrscheinlich, daß Sie MSXML bereits kennen.

Einrichten von MSXML 3.0

Wenn Sie bei Ihrer XML-Entwicklung mit Python arbeiten, müssen Sie nicht auf MSXML 3.0 verzichten. Mit Hilfe der COM-Unterstützung für Python ist dieser Parser von Microsoft vollständig aus Python heraus zugänglich.

Wenn Sie es noch nicht getan haben, müssen Sie python.org besuchen und Ihre Python-Installation um win32all.exe erweitern. Dieses Windows-spezifische Paket unterstützt das COM-Rahmenwerk (Component Object Model) von Microsoft. Das win32all.exe-Paket muß installiert sein, bevor Sie COM-Objekte verwenden können. Weitere Details zum Thema Arbeiten mit Python und COM finden sich in Python, Webdienste und SOAP, wo COM dazu benutzt wird, Objekte in MSSOAP anzusprechen.

Version 3.0 ist die letzte Ausgabe dieses Microsoft-Parsers. Sie bietet volle Unterstützung von XSLT und anderen Dingen. Allerdings ist die Version 3.0 eventuell nicht die Version, die in anderen Anwendungen, z. B. Internet Explorer, benutzt wird. Das ist für Sie vielleicht von Bedeutung. Wenn Sie Python innerhalb einer Anwendung laufen lassen oder wenn Sie Python benutzen, um automatisch mit einer anderen Anwendung zu kommunizieren, müssen Sie sich darüber im klaren sein, daß der Parser einer anderen Anwendung eine ältere Version sein kann. Die genaue Version von MSXML auf der Benutzerseite zu kennen ist vorwiegend für jene wichtig, die clientseitige Skripten für Internet Explorer schreiben, für die der Parser vorbestimmt ist (wie in einem XSLT-Stylesheet, das mit einer XML-Datei verknüpft ist). Eigenständige Anwendungen andererseits können sich ihre eigenen Parser aussuchen (wie wir es auf dieser Seite tun).

Wenn Sie Python-Programme schreiben, benutzen Sie normalerweise eine Programm-ID (ProgID), um ein COM-Objekt zu instanziieren. Dabei können Sie explizit angeben, daß Sie die Version 3.0 und keine frühere benutzen wollen. Wenn Sie jedoch ein Stylesheet in Ihrem XML-Dokument einbetten wollen und vom Internet Explorer verlangen, daß er MSXML 3.0 benutzt, müssen Sie die Dokumentation zum XML SDK von Microsoft zu Rate ziehen, um MSXML 3.0 im Replace-Modus zu installieren. Was die Python-Beispiele auf dieser Seite angeht, funktioniert die ProgID jedoch gut!

DOM-Grundoperationen

Dieser Abschnitt behandelt verschiedene Techniken für das Arbeiten mit DOM und hebt einige Eigenschaften hervor, die von MSXML, aber nicht von PyXML unterstützt werden. Zusätzlich zu diesen Bequemlichkeitsfunktionen von Microsoft bedeutet das Arbeiten mit MSXML auch Arbeiten mit COM. Daher werden hier Beispiele vorgestellt, die mit den verschiedenen von MSXML zurückgegebenen Typen arbeiten, die von Ihren Standardlisten und -tupeln in Python abweichen können.

Das Microsoft-DOM unterstützt die gleichen Operationen wie PyXML-DOM auch, aber es gibt Unterschiede in deren Benutzung. Erstens ist MSXML nur über COM zugänglich, d. h. Ihr Python muß als COM-Client fungieren. Zweitens ist MSXML keine native Python-Implementierung und benutzt daher keine Python-Typen wie Listen und Tupel, die Sie in PyXML finden. Dieser Abschnitt zeigt Ihnen die Grundlagen beim Arbeiten mit diesem fremden Parser aus Python heraus.

Um einige Knoten- und Dokumentbearbeitungen zu illustrieren, brauchen Sie eine XML-Quelle. Sie werden strukturierte Daten wie in books.xml im folgenden Beispiel haben wollen, um Ihre MSXML-Fähigkeiten auszuprobieren.

Beispiel: books.xml

<book name="Python und XML">
  <section name="Anhang E" type="Anhang">
    <chapterTitle>Anhang E</chapterTitle>
    <bodytext>Dieser Anhang konzentriert sich auf...</bodytext>
  </section>
</book>

Mit MSXML kann man dieses Dokument leicht auseinandernehmen. Aber bevor Sie mit MSXML arbeiten können, müssen Sie die richtige Bibliothek für den Zugriff auf COM-Objekte importieren (win32com.client). Außerdem brauchen Sie für den Aufruf von Dispatch die ProgID des Microsoft-XML-Parsers. Wenn Sie das letzte Microsoft-XML-SDK installiert haben, haben Sie bereits Version 3.0 des MSXML-Parsers. Sie haben ihn vermutlich auch dann, wenn Sie Visual Studio.NET oder Internet Explorer 6 verwenden. Wenn Sie sich jedoch nicht sicher sind, können Sie das XML-SDK von Microsoft herunterladen und die neueste Version des Parsers installieren.

Nachdem das Client-Paket importiert und Dispatch mit der korrekten ProgID aufgerufen wurde, benutzen Sie die MSXML-Methode load, um ein Dokument wirklich zu laden:

>>> import win32com.client
>>> msxml = win32com.client.Dispatch("MSXML2.DOMDocument.3.0")
>>> msxml.load("books.xml")
1

Die zurückgegebene 1 gibt in Python-Manier den Erfolg der Operation an und ermöglicht folgende Syntax:

if (msxml.load("books.xml")):
  # Erfolg
else:
  # Fehler

Nun ist die msxml-Instanz bereit, und Sie können damit beginnen, Knoten aus dem Dokument herauszupicken und mit ihnen zu experimentieren.

MSXML-Knoten

Die MSXML-Objekte werden Ihnen bekannt vorkommen, wenn Sie sich mit den PyXML-Objekten in diesem Buch vertraut gemacht haben. Ein documentElement oder den nodeName eines Elements zu bekommen funktioniert so, wie Sie es erwarten:

>>> docelem = msxml.documentElement
>>> print docelem.nodeName
book
>>> print docelem.getAttribute("name")
Python und XML

MSXML streut die ein oder andere Bequemlichkeit ein, z. B. das text-Attribut der Node-Klasse. Damit erhält man den gesamten Textinhalt (oder Zeichendaten) unterhalb des aktuellen Knotens:

>>> print docelem.text
Anhang E Dieser Anhang konzentriert sich auf...

Das kann praktisch sein, wenn man mit Dokumenten arbeitet, die sehr viel Text enthalten. Das xml-Attribut enthält einen XML-String, der den aktuellen Knoten und seine Kinder repräsentiert:

>>> print docelem.xml
<book name="Python und XML">
  <section name="Anhang E" type="Anhang">
    <chapterTitle>Anhang E</chapterTitle>
    <bodytext>Dieser Anhang konzentriert sich auf...</bodytext>
  </section>
</book>

Dies ist sicher kürzer (jedenfalls, was das Tippen angeht) als die Methode PrettyPrint im DOM-Paket von PyXML. Wie in PyXML auch geben natürlich einige MSXML-Methoden Knotenmengen statt einzelner Knoten zurück. In diesen Fällen verwenden Sie die NodeList-Schnittstelle aus MSXML, um damit umzugehen.

Verwenden einer NodeList

MSXML 3.0 unterstützt Knotenlisten sehr gut und bietet ein NodeList-Objekt zu deren Bearbeitung. Dies ist etwas anders als der native und robuste Listentyp in Python und PyXML. Ein NodeList-Objekt hat einen eingebauten Iterator, den Sie zu Ihrem Vorteil verwenden können, indem Sie die Methode nextNode aufrufen. Beachten Sie, daß sich dies vom Iteratoren-Konzept unterscheidet, das in Python 2.2 und neueren Versionen implementiert ist.

node = NodeList.nextNode( )
while node:
   # Tue hier etwas...
   node = NodeList.nextNode( )

Eine while-Schleife kann so lange verwendet werden, bis die Methode nextNode keinen Knoten mehr liefert. Die Datei people.xml im folgenden Beispiel zeigt ein XML-Beispiel, in dem Angestellte und deren Positionen beschrieben werden.

Beispiel: people.xml

<employees>
  <person title="Projektmanager">Cal Ender</person>
  <person title="Kundendienst-Rep.">A. Buddy Codit</person>
  <person title="Customer Service Rep">Will Icare</person>
  <person title="Dokumentationsschreiber">E. Manual</person>
  <person title="Versorgungsspezialist">Willy Eadit</person>
</employees>

Bei einer solchen Struktur kann eine NodeList bequem sein, um alle Knoten eines bestimmten Typs zu verarbeiten. Eine NodeList kann mit einem Aufruf von get-ElementsByTagName oder bei der Verwendung eines Stringausdrucks in den Methoden selectNodes und selectSingleNode in MSXML 3.0 zurückgegeben werden. Das folgende Beispiel zeigt die in nodelists.py verwendete NodeList:

Beispiel: nodelists.py

"""
  nodelists.py -- benutzt das NodeList-Objekt aus MSXML 3.0
"""
import win32com.client    
# Quell-XML
strSourceDoc = "people.xml"
# Instanziiere Parser
objXML = win32com.client.Dispatch("MSXML2.DOMDocument.3.0")

# Prüfe, ob das Laden erfolgreich war
if (not objXML.load(strSourceDoc)):
   print "Fehler beim Laden von", strSourceDoc

# Hole alle person-Elemente
peopleNodes = objXML.getElementsByTagName("person")

# Beginne Iteration durch NodeList mit nextNode()
node = peopleNodes.nextNode()
while node:
    # Gib Wert von text-Abkömmlingen aus
    print "Name: ", node.text,
    
    # Gib Wert des title-Attributs aus
    print "\tPosition: ", node.getAttribute("title")
    
    # Setze Iteration fort
    node = peopleNodes.nextNode()

Wenn Sie nodelists.py von der Kommandozeile ausführen, bekommen Sie eine Textversion mit diesem Inhalt:

C:\appD>c:\python21\python nodelists.py
Name: Cal Ender Position: Projektmanager
Name: A. Buddy Codit Position: Entwicklungsleiter
Name: Will Icare Position: Kundendienst-Rep.
Name: E. Manual Position: Dokumentationsschreiber
Name: Willy Eadit Position: Versorgungsspezialist

XSLT-Unterstützung in MSXML 3.0

MSXML 3.0 unterstützt XSL-Transformationen ohne weitere zusätzliche Software. Der Parser enthält eine Methode namens transformNode, die normalerweise ein Stylesheet als Parameter akzeptiert (in DOM-Form) und das Ergebnis der Verarbeitung des aktuellen Dokuments mit dem angegebenen Stylesheet zurückgibt. Zum Beispiel:

objXML = win32com.client.Dispatch("MSXML2.DOMDocument.3.0")
objXSL = win32com.client.Dispatch("MSXML2.DOMDocument.3.0")
strTransformedXML = objXML.transformNode(objXSL)

Im einfachsten Fall, der im vorigen Code gezeigt ist, werden zwei DOM-Instanzen erzeugt. Eine DOM-Instanz wird für das Quelldokument gebraucht, die zweite enthält das Stylesheet. Um das Ergebnis der Transformation zu bekommen, rufen Sie transformNode auf dem Quell-DOM auf, mit dem Stylesheet-DOM als Parameter.

Die XML-Quelle

Das nächste Beispiel zeigt 1999temps.xml, ein Dokument mit den monatlichen Durchschnittstemperaturen in Woodinville, Washington (USA), in Grad Celsius. Dies ist ein simples XML-Dokument mit einer flachen Struktur.

Beispiel: 1999 temps.xml

<CalendarYear value="1999" data="Monats-Durchschnittshoechstwerte">
  <Month name="Januar">7.22</Month>
  <Month name="Februar">9.72</Month>
  <Month name="Maerz">11.50</Month>
  <Month name="April">14.00</Month>
  <Month name="Mai">17.72</Month>
  <Month name="Juni">21.06</Month>
  <Month name="Juli">24.00</Month>
  <Month name="August">24.00</Month>
  <Month name="September">20.72</Month>
  <Month name="Oktober">15.39</Month>
  <Month name="November">10.28</Month>
  <Month name="Dezember">7.28</Month>
</CalendarYear>

Es gibt Attribute, die das Jahr des Datensatzes und den Typ der Daten angeben. Die Month-Elemente haben ein name-Attribut, während die eigentliche Temperatur in den Zeichendaten steht.

XSL-Stylesheet

Versuchen Sie mit Ihrem Stylesheet die jährliche Durchschnittstemperatur zu bestimmen, basierend auf den monatlichen Durchschnittstemperaturen. Eine Kombination der sum-Funktion und des div-Operators aus XPath erzielt das gewünschte Resultat. Das folgende Beispiel zeigt das Stylesheet temps.xsl.

Beispiel: temps.xsl

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:variable name="average" select="sum(//CalendarYear/Month/text( )) div 12"/>
  <xsl:template match="/">
    <html>
      <body>
        <p>
          <font face="tahoma,arial,helvetica" size="2">
            <xsl:value-of select="/CalendarYear/@data"/> for
            <xsl:value-of select="/CalendarYear/@value"/>:
          </font>
        </p>
        <table border="1" bordercolor="#000000" cellpadding="5" cellspacing="0" width="350">
          <xsl:apply-templates/>
          <tr>
            <td colspan="2" bgcolor="#88BBEE" width="350" align="right">
              <p>
                <font face="tahoma,arial,helvetica" size="2">
                  <b>Average: <xsl:value-of select="format-number($average, ’0.00’)"/></b>
                </font>
              </p>
            </td>
          </tr>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="Month">
    <tr>
      <td bgcolor="#CCCCCC" width="325" align="left">
        <p>
          <font face="tahoma,arial,helvetica" size="2">Month: <b><xsl:value-of select="@name"/></b></font>
        </p>
      </td>
      <td bgcolor="#CCCCCC" width="25" align="left">
        <p>
          <font face="tahoma,arial,helvetica" size="2">
            <b><xsl:value-of select="./text( )"/></b>
          </font>
        </p>
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>

Das Stylesheet führt seine Berechnungen in zwei Teilen durch. Zuerst wird eine Variable erzeugt, die den Durchschnitt aufnimmt, indem die Temperaturen erst mit der sum-Funktion addiert und dann mit dem div-Operator durch die Anzahl der Monate in einem Jahr geteilt werden:

 <xsl:variable name="average" select="sum(//CalendarYear/Month/text( )) div 12"/> 

Schließlich wird das Ganze ein wenig mit Hilfe einer Vorlage formatiert, indem format-number mit $average als Parameter aufgerufen wird:

 <xsl:value-of select="format-number($average, '0.00')"/> 

Das garantiert, daß die Temperaturangabe mindestens zwei Nachkommastellen enthält.

Ausführen einer MSXML-Transformation

Um die Transformation aus Python heraus anzuwenden, erzeugen Sie zwei Instanzen von MSXML 3.0 und übergeben der einen die XML-Quelle und der anderen das Stylesheet. Dann benutzen Sie transformNode, um den Transformationsvorgang abzuschließen. Das nächste Beispiel zeigt transform.py, das die Aufgabe erledigt.

Beispiel: transform.py

"""
   transform.py - benutzt XSLT-Unterstützung von MSXML 3.0 in Python
"""
import win32com.client

strSourceDoc = "1999temps.xml"
strStyleDoc = "temps.xsl"

objXML = win32com.client.Dispatch("MSXML2.DOMDocument.3.0")
objXSL = win32com.client.Dispatch("MSXML2.DOMDocument.3.0")

if (not objXML.load(strSourceDoc)):
   print "Fehler beim Laden von", strSourceDoc

if (not objXSL.load(strStyleDoc)):
   print "Fehler beim Laden von", strStyleDoc

strTransformedXML = objXML.transformNode(objXSL)
print strTransformedXML

Sie können den Vorgang von der Kommandozeile aus starten und die Ausgabe in eine HTML-Datei schreiben, wenn Sie das Ergebnis in einem Browser sehen wollen.

 >c:\python21\python transform.py > temps.html

Die folgende Abbildung zeigt das transformierte XML in einem Browser.

Das Ergebnis der Transformation

Abbildung: Das Ergebnis der Transformation

Bearbeitung von Parsing-Fehlern

Das parseError-Objekt enthält die letzten vom Parser gefundenen Fehler. Betrachten Sie z. B. das Laden eines Dokuments, das nicht existiert:

>>> msxml.load("OderAuchNicht.xml")
0

Das Resultat 0 genügt, um anzugeben, daß etwas schiefgegangen ist. An diesem Punkt können Sie sich das parseError-Objekt vornehmen, um nach der möglichen Ursache zu forschen:

 >>> pe = msxml.parseError 

Die parseError-Schnittstelle wird detailliert im Referenzabschnitt am Ende dieser Seite erklärt. Das Objekt kapselt im wesentlichen sieben Attribute eines XML-Parsing-Fehlers und macht sie mit Hilfe des ParseError-Objekts verfügbar:

>>> print pe.errorCode
-2146697211
>>> print pe.reason
The system cannot locate the resource specified.

Die Fehlerbedingungen deuten darauf hin, daß es klug sein könnte, auch die URL zu prüfen, die der Parser benutzt hat, um das Dokument zu laden:

>>> print pe.url
OderAuchNicht.xml

Wie Sie sehen können, besteht das Problem darin, daß der Parser nach einer Datei sucht, die nicht existiert. Zusätzlich zum Fehlergrund (reason) und -code (errorCode) enthält der Parser auch Informationen über die Stelle eines Parsing-Fehlers in der Datei (filepos, line und linepos).

MSXML 3.0-Referenz

Dieser Abschnitt enthält eine Referenz für die in MSXML 3.0 öffentlichen Methoden, die in Python benutzt werden können. Basierend auf DOM, unterstützt MSXML 3.0 fünf Haupttypen von Objekten. Ein Node-Objekt enthält die DOM-Schnittstelle zu einem Knoten plus einiges an eingebauter Microsoft-Bequemlichkeit in Form weiterer Funktionen. Document unterstützt die DOM-Schnittstelle für ein Document plus Microsoft-eigene Erweiterungen. Weiterhin unterstützt MSXML NamedNodeMap-, NodeList- und ParseError-Objekte. Dieser Abschnitt führt die Details jedes Objekts und seiner Methoden auf.


Document-Objekte in MSXML 3.0

Das Document-Objekt unterstützt die gleiche Funktionalität wie die Document-Schnittstelle im W3C-DOM, fügt aber auch einige Microsoft-Erweiterungen hinzu. In MSXML 3.0 können Sie z. B. die Methode validate verwenden, um zu prüfen, ob Ihr Dokument hinsichtlich seiner DTD gültig ist:

myDomDocument.validate( )

Zusätzlich zur Validierung unterstützt MSXML 3.0 mit Hilfe der Methode transformNode auch XSLT-Transformationen:

myDomDocument.transformNode(myXSLTDomDocument)

Die transformNode-Methode erwartet eine DOM-Instanz als Parameter, die ein XSLT-Stylesheet enthält. Die Transformation wird auf dem aktuellen Dokument ausgeführt, und das Ergebnis wird an den Aufrufer zurückgegeben. Der folgende Abschnitt ist eine Referenz der verschiedenen Methoden und Eigenschaften des Document-Objekts.

Methoden von Document-Objekten in MSXML 3.0

abort( )

Bricht eine asynchrone Lade-Operation ab, falls sie noch läuft.

createAttribute(name)

Erzeugt ein Attribut mit dem angegebenen name als Parameter.

createCDATASection(data)

Erzeugt den Zeichenstring data als CDATA-Knoten und gibt ihn zurück.

createComment(data)

Erzeugt einen neuen Kommentar mit data als Inhalt und gibt ihn zurück.

createDocumentFragment( )

Erzeugt ein neues, leeres Dokumentfragment und gibt es zurück.

createElement(elementName)

Erzeugt und liefert ein neues Element mit dem angegebenen Namen.

createEntityReference(name)

Erzeugt und liefert ein neues Entity-Referenz-Objekt.

createNode(type, name, namespaceURI)

Erzeugt und liefert einen Knoten mit angegebenem type und name im angegebenen Namensraum-Kontext.

createProcessingInstruction(target, data)

Erzeugt und liefert eine neue Verarbeitungsanweisung mit angegebenem target und data.

createTextNode(data)

Erzeugt und liefert einen Textknoten mit data als Zeicheninhalt.

getElementsByTagName(elementName)

Gibt eine NodeList von Elementen mit passendem Namen zurück.

getProperty( )

Liefert die Objektattribute SelectionLanguage, ServerHTTPRequest oder Selection-Namespace.

load(url)

Lädt die angegebene URL. Falls es eine Datei ist, versucht der Parser, sie zu laden; wenn es eine entfernte HTTP-Adresse ist, versucht er, eine Verbindung damit aufzubauen und das Dokument zu laden. Der existierende Inhalt des Dokuments wird gelöscht.

loadXML(strXML)

Erzeugt ein Dokumentobjekt aus einem wohlgeformten XML-String. Es wird nur Text in den Formaten UTF-16 und UCS-2 akzeptiert. Der existierende Inhalt des Dokuments wird gelöscht.

nodeFromID(id)

Gibt den Knoten im Dokument mit dem eindeutigen ID-Wert zurück.

save(objTarget)

Versucht, das XML-Dokument an die angegebene Stelle zu speichern.

setProperty( )

Erlaubt Ihnen, den Wert der Objektattribute SelectionLanguage, ServerHTTPRequest oder SelectionNamespace zu setzen.

validate( )

Führt eine Validierung des Dokuments durch, basierend auf der angegebenen DTD.

Attribute von Document-Objekten in MSXML 3.0

In diesem Abschnitt sind mit »Attributen« meist Objektattribute (und nicht XML-Attribute) gemeint. – Anm. d. Ü.

async

Dieses les- und schreibbare Attribut bestimmt, ob Dokumente synchron oder asynchron geladen werden.

doctype

Dieses nur-lesbare Attribut enthält den mit dem XML-Dokument assoziierten doctype.

documentElement

Dieses les- und schreibbare Attribut enthält das Wurzelelement des XML-Dokuments.

implementation

Dieses nur-lesbare Attribut enthält das DOMImplementation-Objekt für die Dokumentinstanz.

namespaces

Dieses nur-lesbare Attribut enthält die Menge aller in diesem Dokument benutzten Namensräume.

ondataavailable

Dieses les- und schreibbare Attribut stellt den Ereignis-Handler dar, der aufgerufen wird, sobald Daten verfügbar sind.

onreadystatechange

Dieses les- und schreibbare Attribut stellt den Ereignis-Handler dar, der aufgerufen wird, wenn sich das Attribut readyState ändert.

ontransformnode

Dieses les- und schreibbare Attribut ist auf den Ereignis-Handler gesetzt, der aufgerufen wird, wenn das Ereignis transformnode ausgelöst wird.

parseError

Dieses nur-lesbare Attribut enthält das ParseError-Objekt des Dokuments.

preserveWhiteSpace

Dieses les- und schreibbare Attribut bestimmt, ob Leerraum beim Parsen des Dokuments erhalten bleibt.

readyState

Dieses nur-lesbare Attribut gibt den aktuellen Zustand der Dokumentinstanz an.

resolvedExternals

Dieses les- und schreibbare Attribut bestimmt, ob externe Definitionen während des Parsens aufgelöst werden.

url

Dieses nur-lesbare Attribut stellt die kanonische URL des zuletzt geladenen XML-Dokuments dar.

validateOnParse

Dieses les- und schreibbare Boolesche Attribut gibt an, ob der Parser beim Parsing-Vorgang validieren soll oder nicht.


Node-Objekte in MSXML 3.0

Das Node-Objekt ist das fundamentale Objekt in DOM und in MSXML 3.0. Diese Schnittstelle unterstützt die üblichen Methoden, die in diesem Buch zum Arbeiten mit DOM benutzt werden.

Methoden von Node-Objekten in MSXML 3.0

appendChild(newChildElement)

Fügt den angegebenen Knoten an die Kinder-NodeList dieses Elements an.

cloneNode( )

Erzeugt einen neuen Knoten, der eine vollständige Kopie dieses speziellen Knotens ist.

hasChildNodes( )

Gibt true zurück, falls der Knoten Kinder hat.

insertBefore(newChild, referenceChild)

Nimmt den Knoten newChild und fügt ihn in der NodeList dieses Knotens unmittelbar vor referenceChild ein, das ein existierendes Kind sein muß.

removeChild(oldChild)

Entfernt den angegebenen Knoten aus der NodeList dieses Knotens.

replaceChild(newChild, oldChild)

Setzt newChild an derselben Stelle ein, an der sich oldChild befand.

selectNodes(pattern)

Gibt eine Liste von Knoten zurück, die zum angegebenen Muster passen.

selectSingleNode(pattern)

Gibt den ersten Knoten zurück, der zum angegebenen Muster paßt.

transformNode(stylesheet)

Nimmt ein stylesheet, das in einer DOM-Instanz geladen wurde, und wendet dessen Regeln auf diesen Knoten an. Die resultierende Transformation wird an den Aufrufer der Methode zurückgegeben.

transformNodeToObject(stylesheet, outputObject)

Funktioniert wie transformNode, sendet jedoch die Ausgabe an das angegebene Objekt.

Attribute von Node-Objekten in MSXML 3.0

In diesem Abschnitt sind mit »Attributen« meist Objektattribute (und nicht XML-Attribute) gemeint. – Anm.d.Ü.

attribute

Dieses nur-lesbare Attribut enthält die Liste der zu diesem Knoten gehörenden Attribute.

baseName

Dieses nur-lesbare Attribut enthält den Basisnamen des im Namensraum qualifizierten Namens.

childNodes

Dieses nur-lesbare Attribut stellt eine NodeList der Kinder dieses Knotens dar.

dataType

Dieses les- und schreibbare Attribut gibt den Datentyp dieses Knotens an.

definition

Dieses nur-lesbare Attribut enthält die Definition des Knotens in der DTD.

firstChild

Dieses nur-lesbare Attribut stellt das erste Kindelement des aktuellen Knotens dar.

lastChild

Dieses nur-lesbare Attribut ist ähnlich zu firstChild, stellt aber den letzten Knoten in der NodeList dar.

namespaceURI

Dieses nur-lesbare Attribut enthält den URI des Namensraums.

nextSibling

Dieses nur-lesbare Attribut gibt den nächsten Nachbarknoten in der Liste zurück (bezogen auf diesen Knoten und seinen Elternknoten).

nodeName

Der Elementname des Knotens.

nodeType

Der Knotentyp, wie er in der DOM-Empfehlung definiert ist.

nodeTypedValue

Ein les- und schreibbares Attribut, das den Knotenwert in Form eines definierten Datentyps angibt.

nodeTypeString

Dieser Wert stellt den Knotentyp als String dar.

nodeValue

Der Datenwert des Knotens, z. B. der Text eines Textknotens.

ownerDocument

Dieses nur-lesbare Attribut gibt an, welches Dokument diesen Knoten besitzt.

parentNode

Der Elternknoten dieses Knotens.

parsed

Dieser Boolesche Wert gibt an, ob der Knoten und seine Kinder erfolgreich geparst wurden.

prefix

Dieses les- und schreibbare Attribut stellt das Namensraum-Präfix des Knotens dar.

previousSibling

Dieses nur-lesbare Attribut gibt den Vorgänger dieses Knotens in der Kinderliste seines Elternknotens an.

specified

Dieses nur-lesbare Attribut gibt an, ob ein Attributknoten explizit angegeben oder ob er von einem Vorgabewert einer DTD oder eines Schemas abgeleitet ist.

text

Dieses les- und schreibbare Attribut enthält den Text des Knotens und seiner Kinder.

xml

Dieses nur-lesbare Attribut enthält den Knoten im XML-Format (inklusive seiner Kinder).


NamedNodeMap-Objekte in MSXML 3.0

Im NamedNodeMap-Objekt konzentriert sich die Unterstützung von Namensräumen und Attributknoten in MSXML 3.0.

getNamedItem(name)

Diese Methode holt das Attribut mit dem angegebenen Namen.

getQualifiedItem(baseName, namespaceURI)

Diese Methode holt auch ein Attribut, aber innerhalb des angegebenen Namensraumkontexts.

item(index)

Diese Methode liefert den Eintrag für index. Wenn es keinen solchen gibt, wird None zurückgegeben.

nextNode( )

Diese Methode gibt den nächsten Knoten der Menge zurück.

removeNamedItem(name)

Diese Methode entfernt den angegebenen Eintrag aus der Knotenmenge.

removeQualifiedItem(name, namespaceURI)

Diese Methode entfernt den Eintrag, der sich im angegebenen Namensraum befindet, aus der Knotenmenge.

reset( )

Diese Methode setzt den Iterationszähler auf null zurück.

setNamedItem(newItem)

Diese Methode fügt den angegebenen Knoteneintrag in die Menge ein.

length

Das length-Attribut enthält eine Ganzzahl, die die Anzahl von Einträgen in der Menge angibt.


NodeList-Objekte in MSXML 3.0

Die NodeList wird für gewöhnlich von DOM-Methoden zurückgegeben, die eine Knotenmenge oder -liste liefern. NodeList bietet einige spezielle Methoden und Attribute, um das Arbeiten mit der Liste zu vereinfachen.

item(index)

Diese Methode liefert das Element der Liste am angegebenen index (nullbasiert, da Python-Sequenzindizes) oder None, wenn es an der Stelle index keinen Knoten gibt.

nextNode( )

Diese Methode gibt den nächsten Knoten in der Liste zurück, basierend auf dem internen Iterator.

reset( )

Diese Methode setzt den internen Iterator auf null zurück.

length

Dieses Attribut gibt die Anzahl der Elemente in der Liste an.


ParseError-Objekte in MSXML 3.0

Das ParserError-Objekt ist eine Sammlung von Attributen, die dann gesetzt werden, wenn ein Fehler auftritt. Der Parser füllt dieses Objekt zur Laufzeit auf, wenn Fehler auftauchen.

errorCode

Die Zahl, die den Fehler darstellt.

filepos

Die Position in der Datei, basierend auf Bytes.

line

Die Zeilennummer in der Datei, in der der Fehler auftrat.

linepos

Die Zeichenposition in der Zeile, an der der Fehler auftrat.

reason

Dieses Attribut enthält die Ursache des Fehlers, sofern bekannt.

srcText

Dieses Attribut enthält den vollen Text der Dokumentzeile, in der der Fehler auftrat.

url

Dieses Attribut stellt die URL des Dokuments dar.

  

zum Seitenanfang

<< zurück vor >>

 

 

 


 

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Python & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

 

Tipp der data2type-Redaktion:
Zum Thema Python & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Python & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de