Kategorie:MSXML

Aus API-Wiki
Version vom 28. November 2011, 00:32 Uhr von Jochen Wierum (Diskussion | Beiträge) (Änderungen von 194.8.26.147 (Diskussion) rückgängig gemacht und letzte Version von Jochen Wierum wiederhergestellt)
Zur Navigation springenZur Suche springen

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>