Wie gehe ich mit Leerzeichen im XML-Objektmodell um?
Manchmal zeigt das XML-Objektmodell TEXT-Knoten an, die Leerzeichen enthalten. Wenn Leerzeichen abgeschnitten werden, kann dies zu Verwirrung führen. Beispielsweise generiert das folgende XML-Beispiel:
]>
Smith
John
den folgenden Baum:
VERARBEITUNGSANLEITUNG: xml
ELEMENT: Person
TEXT: Nachname
TEXT: Vorname
TEXT:
Der Vor- und Nachname ist von TEXT-Knoten umgeben, die nur Leerzeichen enthalten Zeichen, da das Inhaltsmodell des Elements „person“ MIXED ist; es enthält das Schlüsselwort #PCDATA. Das MIXED-Inhaltsmodell gibt an, dass zwischen Elementen Text vorhanden sein kann. Daher ist auch Folgendes richtig:
Mein Nachname ist Smith und mein Vorname ist
Das Ergebnis ist ein Baum ähnlich dem folgenden:
ELEMENT: Person
TEXT: und mein Vorname ist
ELEMENT: Vorname
TEXT:
Ohne die Leerzeichen nach und vor dem Wort „is“ und die Leerzeichen nach und vor dem Wort „and“ wäre der Satz unverständlich. Daher sind für das MIXED-Inhaltsmodell alle Textkombinationen, Leerzeichen und Elemente relevant. Dies ist bei nicht-MIXED-Content-Modellen nicht der Fall.
Das Ergebnis ist der folgende klare Baum:
DocType: Person
ELEMENT: Person ELEMENT: Nachname
ELEMENT: Vorname
Was macht die XML-Deklaration?
Die XML-Deklaration muss oben im XML-Dokument aufgeführt sein:
Sie gibt die folgenden Elemente an:
Das Dokument ist ein XML-Dokument. MIME-Detektoren können damit erkennen, ob eine Datei vom Typ text/xml ist, wenn der MIME-Typ fehlt oder nicht angegeben wurde.
Das Dokument entspricht der XML 1.0-Spezifikation. Dies wird in Zukunft wichtig sein, wenn es andere Versionen von XML gibt.Dokumentzeichenkodierung. Das Kodierungsattribut ist optional und standardmäßig auf UTF-8 eingestellt.
HINWEIS: Die XML-Deklaration muss in der ersten Zeile des XML-Dokuments stehen, daher erzeugt die folgende XML-Datei:
den folgenden Parsing-Fehler:
Ungültige XML-Deklaration.
Ort 0000007: ------^
Hinweis: Die XML-Deklaration ist optional. Wenn Sie oben Kommentare oder Verarbeitungsanweisungen angeben müssen, geben Sie keine XML-Deklaration ein. Die Standardkodierung ist jedoch UTF-8.
Wie drucke ich mein XML-Dokument in einem lesbaren Format?
Wenn Sie ein Dokument von Grund auf mit dem DOM erstellen, um eine XML-Datei zu erstellen, steht alles in einer Zeile ohne Leerzeichen dazwischen. Dies ist das Standardverhalten.
Konstruiert das Standard-XSL-Stylesheet in Internet Explorer 5, um XML-Dokumente in einem lesbaren Format anzuzeigen und zu drucken. Wenn Sie beispielsweise IE5 installiert haben, schauen Sie sich die Datei nospace.xml an. Der Browser sollte den folgenden Baum anzeigen:
-
-
Das Drucken von lesbarem XML ist sehr interessant, insbesondere wenn es DTDs gibt, die verschiedene Arten von Inhaltsmodellen definieren. Beispielsweise können Sie im Rahmen des gemischten Inhaltsmodells (#PCDATA) keine Leerzeichen einfügen, da dies die Bedeutung des Inhalts ändern könnte. Betrachten Sie beispielsweise das folgende XML:
Elephant
Dies sollte besser nicht als
E
lephantausgegeben werden, da die Wortgrenzen nicht mehr korrekt sind.
All dies macht das automatisierte Drucken problematisch. Wenn Sie kein lesbares XML drucken müssen, können Sie das DOM verwenden, um Leerzeichen als Textknoten an geeigneten Stellen einzufügen.
Der Namespace-Typ muss #FIXED sein. Das Gleiche gilt für Attribut-Namespaces:
DTD- und XML-Schemas können nicht gemischt werden. Zum Beispiel das folgende xmlns:x CDATA #FIXED "x-schema:myschema.xml" . Die Verwendung von DTD- und XML-Schemas schließt sich gegenseitig aus.
Wie verwende ich XMLDSO in Visual Basic?
Verwenden Sie das folgende XML als Beispiel:
Mark Hanson
Jane Smith
Verwenden Sie den folgenden Code, um XML-Daten in das XML-DSO-Steuerelement zu laden:
Dim dso als neues XMLDSOControl
Dim doc als IXMLDOMDocument
Set doc = dso.XMLDocument
doc.Load ("d:test.xml")
Verwenden Sie das Folgender Code ordnet das DSO mithilfe eines DataAdapter einem neuen Recordset-Objekt zu: > Set rs.DataSource = da
Zugriffsdaten:
MsgBox rs.Fields("name ").Value
Das Ergebnis zeigt die Zeichenfolge „Mark Hanson“ an
Wie verwende ich XML DOM in Java?
Die IE5-Version von MSXML.DLL muss installiert sein. Wählen Sie in Visual J++ 6.0 im Menü „Projekt“ die Option „COM-Wrapper hinzufügen“ und dann „Microsoft XML 1.0“ aus der COM-Objektliste aus. Dadurch wird der erforderliche Java-Wrapper in einem neuen Paket namens „msxml“ erstellt. Diese vorgefertigten Java-Wrapper stehen auch zum Download zur Verfügung. Klassen können wie folgt verwendet werden:
import com.ms.com.*;
import msxml.*;
{
public static void main (String[] args) {
DOMDocument doc = new DOMDocument();
doc.load(new Variant("file://d:/samples/ot.xml"));
System.out.println("Loaded " + doc.getDocumentElement().getNodeName());
}
}
Das Codebeispiel stammt von der Sonne Religionsbeispiel Laden Sie die 3,8 MB große Testdatei „ot.xml“. Die Variant-Klasse umschließt den Win32-Basistyp VARIANT.
Sie können keine Zeigervergleiche auf Knoten verwenden, da Sie jedes Mal, wenn Sie den Knoten abrufen, tatsächlich einen neuen Wrapper erhalten. Verwenden Sie daher nicht den folgenden Code:
IXMLDOMNode root2 = doc.getDocumentElement();
if (root1 == root2). .
Verwenden Sie stattdessen den folgenden Code:
IXMLDocument*, XMLDocument*
*,IXMLElementCollection*,
tagXMLEMEM_TYPE* _xml_error*
Dadurch wird die Größe auf 147 KB reduziert. Sie können auch die folgenden Elemente löschen:
DOMFreeThreadedDocument
xmlhttpRequest
Verwenden Sie die XML-DAV-HTTP-Erweiterung, um mit dem Server zu kommunizieren.IXTLRuntime
Definieren Sie das XSL-Stylesheet-Skriptobjekt. XMLDSOControl
Bindet an die XML-Daten in der HTML-Seite.
XMLDOMDocumentEvents
Rückrufe während des Analyseprozesses zurückgeben.
Dadurch wird die Größe auf 116 KB reduziert. Um es noch kleiner zu machen, bedenken Sie die Tatsache, dass das DOM selbst zwei Schichten hat: Die Kernschicht besteht aus:
DOMDocument, IXMLDOMDocument
IXMLDOMDocumentFragment*
IXMLDOMImplementationIXMLDOMParseError
Und die DTD-Informationen, die Benutzer möglicherweise behalten müssen:
🎜> IXMLDOMNotation
Alle Knotentypen in einem XML document sind IXMLDOMNodes, die die volle Funktionalität bieten, es gibt jedoch Wrapper auf höherer Ebene für jeden Knotentyp. Wenn Sie daher den DOMDocument-Wrapper ändern und diese spezifischen Typen so ändern, dass sie IXMLDOMNode verwenden, können alle folgenden Schnittstellen entfernt werden: IXMLDOMAttribute
IXMLDOMProcessingInstruction
IXMLDOMEntityReference
Durch das Entfernen wird die Größe auf 61 KB reduziert. Für IXMLDOMElement sind jedoch sowohl die Methoden getAttribute als auch setAttribute nützlich. Andernfalls müssen Sie Folgendes verwenden:
IXMLDOMNode.getAttributes().setNamedItem(...)