Kategorie:MSXML

Aus API-Wiki
Wechseln zu: Navigation, Suche

MSXML ist eine Bibliothek von Microsoft, mit der man XML verarbeiten kann.

Hinweise

Die Beispiele verwenden das folgende XML-Knotenset:

<?xml version="1.0"?>
<bibliothek>
    <buecher>
        <buch name="VB für Dummies" />
        <buch name="Turbo Pascal für Dummies" />
    </buecher>
</bibliothek>

Dieses Knotenset kann mit LoadXML aus einer Zeichenkette geladen werden, es kann auch von Grund auf erstellt werden:

    Dim objXML As MSXML2.FreeThreadedDOMDocument
    Dim objPI As MSXML2.IXMLDOMProcessingInstruction
    Dim objRoot As MSXML2.IXMLDOMNode
    Dim objAttr As MSXML2.IXMLDOMAttribute
    Dim objBooks As MSXML2.IXMLDOMNode
    Dim objBook As MSXML2.IXMLDOMNode
    
    '   Dokument erstellen
    Set objXML = New MSXML2.FreeThreadedDOMDocument
    
    '   XML-Kopf erstellen und einfügen
    Set objPI = objXML.createProcessingInstruction("xml", "version=""1.0""")
        '   Kodierung einfügen
        Set objAttr = objXML.createAttribute("encoding")
        objAttr.nodeValue = "UTF-8"
        Call objPI.Attributes.setNamedItem(objAttr)
    Call objXML.appendChild(objPI)
    
    '   Wurzel-Element einfügen
    Set objRoot = objXML.createElement("bibliothek")
    Call objXML.appendChild(objRoot)
        
        '   Zeilenumbruch und Einrückung erstellen
        Call objRoot.appendChild(objXML.createTextNode(vbNewLine & vbTab))
        
        '   Liste der Bücher erstellen und einfügen
        Set objBooks = objXML.createElement("bücher")
        Call objRoot.appendChild(objBooks)
        
            '   Erstes Buch einfügen
            Call objBooks.appendChild(objXML.createTextNode(vbNewLine & vbTab & vbTab))
            Set objBook = objXML.createElement("buch")
            Set objAttr = objXML.createAttribute("name")
            objAttr.nodeValue = "VB für Dummies"
            Call objBook.Attributes.setNamedItem(objAttr)
            Call objBooks.appendChild(objBook)
            
            '   Zweites Buch einfügen
            Call objBooks.appendChild(objXML.createTextNode(vbNewLine & vbTab & vbTab))
            Set objBook = objXML.createElement("buch")
            Set objAttr = objXML.createAttribute("name")
            objAttr.nodeValue = "Turbo Pascal für Dummies"
            Call objBook.Attributes.setNamedItem(objAttr)
            Call objBooks.appendChild(objBook)
        
        '   Zeilenumbruch und Einrückung einfügen
        Call objBooks.appendChild(objXML.createTextNode(vbNewLine & vbTab))
        
    '   Zeilenumbruch und Einrückung einfügen
    Call objRoot.appendChild(objXML.createTextNode(vbNewLine))
        
    '   Ergebnis ausgeben
    Debug.Print objXML.xml
    
    Set objBook = Nothing
    Set objBooks = Nothing
    Set objAttr = Nothing
    Set objRoot = Nothing
    Set objPI = Nothing
    Set objXML = Nothing

Sofern notwendig, wird das folgende XSLT-Knotenset verwendet, welches ebenfalls aus einer Zeichenkette geladen werden kann:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
            indent="yes" 
            encoding="ISO-8859-1" 
            omit-xml-declaration="yes" 
            standalone="yes" 
            doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" 
            doctype-system="http://www.w3.org/TR/html4/loose.dtd" />

    <xsl:template match="bibliothek">
        <xsl:element name="html">
            <xsl:element name="title">
                <xsl:text disable-output-escaping="yes">ActiveVB - Beispiele für XML</xsl:text>
            </xsl:element>
            <xsl:element name="body">
                <xsl:apply-templates />
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="buecher">
        <xsl:element name="h1">
            <xsl:text disable-output-escaping="yes">Analoge und digitale Bücher</xsl:text>
        </xsl:element>
        <xsl:element name="ul">
            <xsl:apply-templates select="buch|ebook" />
        </xsl:element>
    </xsl:template>

    <xsl:template match="buch|ebook">
        <xsl:element name="li">
            <xsl:value-of select="./@name" />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>