Heim  >  Artikel  >  Backend-Entwicklung  >  Häufig gestellte Fragen zum Einstieg in XML (4)

Häufig gestellte Fragen zum Einstieg in XML (4)

黄舟
黄舟Original
2016-12-22 17:39:441897Durchsuche

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

John



Das Ergebnis ist ein Baum ähnlich dem folgenden:


ELEMENT: Person

TEXT: Mein Nachname ist

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.

Um den TEXT-Knoten, der nur aus Leerzeichen besteht, verschwinden zu lassen, entfernen Sie das Schlüsselwort #PCDATA aus der Elementdeklaration „person“:


Das Ergebnis ist der folgende klare Baum:

Verarbeitungsanweisung: xml

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.

Zeile 0000002:

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

lephant

ausgegeben 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.

 Wie verwende ich Namespaces in DTD? Um einen Namespace in einer DTD zu verwenden, deklarieren Sie ihn in der ATTLIST-Deklaration des Elements, das ihn verwendet, wie folgt:


Der Namespace-Typ muss #FIXED sein. Das Gleiche gilt für Attribut-Namespaces:

Namespaces und XML-Schemas

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

206 765 4583


Jane Smith

425 808 1111


Sie können eine Bindung an ein ADO-Recordset wie folgt durchführen:

Erstellen Sie ein neues VB 6.0-Projekt.

Fügen Sie Verweise auf Microsoft ActiveX Data Objects 2.1 oder höher, Microsoft Data Adapter Library und Microsoft XML Version 2.0 hinzu.


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 class Class1

{

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 root1 = doc.getDocumentElement();

IXMLDOMNode root2 = doc.getDocumentElement();

if (root1 == root2). .


Verwenden Sie stattdessen den folgenden Code:

if (ComLib.isEqualUnknown(root1, root2)) ....

Die Gesamtgröße des .class-Wrappers beträgt ca. 160 KB. Für eine vollständige Konformität mit der W3C-Spezifikation sollten jedoch nur IXMLDOM*-Wrapper verwendet werden. Die folgenden Klassen sind alte IE 4.0 XML-Schnittstellen, Sie können sie aus dem msxml-Ordner entfernen:


IXMLAttribute*,

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

Zugriff auf XML-Dokumente aus mehreren Threads in Java-Anwendungen.

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

IXMLDOMNode*

IXMLDOMDocumentFragment*

IXMLDOMImplementation

IXMLDOMParseError


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

> IXMLDOMElement

IXMLDOMProcessingInstruction
IXMLDOMEntityReference

IXMLDOMText



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(...)

Das Obige ist der Inhalt der FAQ (4) für den Einstieg in XML . Bitte achten Sie auf weitere verwandte Inhalte auf der chinesischen PHP-Website (www.php.cn)!





Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn