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

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

黄舟
黄舟Original
2016-12-22 17:38:201872Durchsuche

Wie lade ich Dokumente mit Fremd- und Sonderzeichen?

Dokumente können fremde Zeichen enthalten, wie zum Beispiel:


fremde Zeichen (úóí?)


Zum Beispiel müssen fremde Zeichen wie 磲 vorhanden sein vorangestellt ist eine Escape-Sequenz. Fremdzeichen können wie folgt UTF-8-kodiert oder mit einer anderen Kodierung angegeben werden:


 fremde Zeichen (磲)


Die XML-Datei wird jetzt korrekt geladen.

Andere Zeichen sind in XML reserviert und müssen anders behandelt werden. Das folgende XML:


This & that
erzeugt den folgenden Fehler:
Hier sind keine Leerzeichen zulässig.
Zeile 0000001: Dies & das
Position 0000012: ----------^


Hier ist & Teil der XML-Syntaxstruktur, wenn es einfach platziert wird Innerhalb der XML-Datenquelle kann es nicht als & interpretiert werden. Sie müssen spezielle Zeichenfolgen namens „Entitäten“ ersetzen.

 Dies & das
Die folgenden Zeichen erfordern entsprechende Entitäten:


 < <
 & &
 > ' '

Das Anführungszeichen wird als Trennzeichen für Attributwerte im Markup verwendet und kann daher im Allgemeinen nicht innerhalb von Attributwerten verwendet werden. Folgendes gibt beispielsweise einen Fehler zurück:


Das einfache Anführungszeichen wird hier sowohl als Attributtrennzeichen als auch innerhalb des Attributwerts selbst verwendet. Um dieses Problem zu beheben, können Sie das Attributtrennzeichen in doppelte Anführungszeichen ändern:

Oder Sie können die einfachen Anführungszeichen in Entitäten ' maskieren.

Beide oben genannten Methoden werden in übergeben XML-Objektmodell Die getAttribute-Methode gibt den Attributwert von John's Stuff zurück. Ebenso können Sie für doppelte Anführungszeichen die Entität

 " verwenden.

Sie können auch Sonderzeichen im Elementinhalt verarbeiten, indem Sie den Text in einen CDATA-Abschnitt platzieren. Folgendes ist richtig:

In diesem Beispielsweise zeigt das XML-Objektmodell den CDATA-Knoten als untergeordneten Knoten des XML-Knotens an, der die Zeichenfolge

 This & that is just „text“ content.

 als nodeValue zurückgibt COM-Komponente in Visual C++ 6.0 import „msxml.dll“ named_guids no_namespace

 Es definiert alle IXML*-Schnittstellen und Schnittstellen-IDs, damit sie in Anwendungen verwendet werden können. Sie können die MSXML-Typbibliothek und Header-Dateien auch von INETSDK (Englisch) und uuid.lib erhalten die Klassen-IIDs enthält.

Das folgende XML enthält HTML-Entitäten:

Copyright? 🎜>

Es wird der folgende Fehler erzeugt:


Verweis auf undefinierte Entität „Kopie“ Zeile: 1, Position: 23, Fehlercode: 0xC00CE002

Copyright ? 2000, ...

--------^

Dies liegt daran, dass XML nur fünf integrierte Entitäten hat. Weitere Informationen Informationen zu integrierten Entitäten finden Sie unter „Wie lade ich Dokumente mit Fremd- und Sonderzeichen?“ Um HTML-Entitäten zu verwenden, müssen Sie diese mit einer DTD definieren. Weitere Informationen finden Sie in den W3C-XML-Empfehlungen (auf Englisch). es direkt im DOCTYPE-Tag wie folgt:

Copyright ? 2000, Microsoft Inc, Alle Rechte vorbehalten


Um es zu laden, müssen Sie es umdrehen Deaktivieren Sie das Attribut „validateOnParse“ der IXMLDOMDocument-Schnittstelle. Versuchen Sie, es in die Validator-Testseite einzufügen, deaktivieren Sie die DTD-Validierung und klicken Sie auf Validieren. Beachten Sie, dass das Dokument geladen wird und die Copyright-Zeichen im DOM-Baum am Ende der Validierungsseite angezeigt werden.

Wenn die DTD-Validierung abgeschlossen ist, muss die HTML-Entität als Parameter-Entität wie folgt in die vorhandene DTD eingefügt werden:

%HTMLENT;
% HTMLENT;

  Es werden alle HTML-Entitäten so definiert, dass sie in XML-Dokumenten verwendet werden können.


Wie gehe ich mit Leerzeichen im Elementinhalt um?

XML DOM bietet drei Möglichkeiten, auf den Textinhalt eines Elements zuzugreifen:

Attributverhalten

nodeValue gibt TEXT, CDATA, COMMENT und PI zurück, wie in der ursprünglichen XML-Quelle angegeben Der Rohtextinhalt auf dem Knoten (einschließlich Leerzeichen). Für ELEMENT-Knoten und DOCUMENT selbst wird null zurückgegeben.

Daten wie nodeValue

Text Wiederholt mehrere TEXT- und CDATA-Knoten im angegebenen Teilbaum verbinden und das kombinierte Ergebnis zurückgeben.

Hinweis: Leerzeichen umfassen neue Zeilen, Tabulatoren und Leerzeichen.

Das Attribut nodeValue gibt normalerweise den Inhalt des Originaldokuments zurück, unabhängig davon, wie das Dokument geladen wurde und vom aktuellen xml:space-Bereich.

Das Textattribut verbindet den gesamten Text im angegebenen Teilbaum und erweitert die Entität. Dies hängt damit zusammen, wie das Dokument geladen wird, dem aktuellen Status des PReserveWhiteSpace-Schalters und dem aktuellen xml:space-Bereich, siehe unten:

PRESERVEWHITESPACE = TRUE Wenn das Dokument geladen wird

PreserVewhiteSpace = True PreservedSpace = True PreservewhiteSpace = FA LSE PRESERVEWHITESPACE = FALSE

XML: Space = Preserve XML: Space = DEFAULT XML : space=preserve 🎜>preserveWhiteSpace=true PreserveWhiteSpace=true PreserveWhiteSpace=false

xml:space=preserve xml:space=default xml:space=preserve xml:space=default reserviert halbreserviert Und abschneiden Halbkonserviert Halb erhalten und abgeschnitten


Beibehalten bedeutet hier, dass der ursprüngliche Textinhalt genau derselbe ist wie im ursprünglichen XML-Dokument. Abschneiden bedeutet, dass führende und nachfolgende Leerzeichen entfernt wurden. Halbkonserviert bedeutet, dass „signifikante Leerzeichen“ erhalten bleiben und „unwichtige Leerzeichen“ normalisiert werden. Wichtige Leerzeichen sind Leerzeichen innerhalb des Textinhalts. Nicht signifikante Leerzeichen sind die Leerzeichen zwischen Token und sehen so aus: Rot ist ein unwichtiges Leerzeichen, das ignoriert werden kann, während Grün ein wichtiges Leerzeichen ist, weil es Teil des Textinhalts ist und daher eine wichtige Bedeutung hat, die ignoriert werden kann ignoriert. In diesem Beispiel gibt die Texteigenschaft also Folgendes zurück:

Statusrückgabewert

Reserviert „nt JanentSmith n“

Reserviert und abgeschnitten „JanentSmith“

Semi- reserviert „ Jane Smith „

 

Halbkonserviert und abgeschnitten „Jane Smith“

Bitte beachten Sie, dass „halbkonserviert“ unwichtige Leerzeichen normalisiert, z. B. werden Zeilenumbrüche und Tabulatorzeichen reduziert auf ein einzelnes Leerzeichen. Wenn Sie das Attribut „xml:space“ und den Schalter „preserveWhiteSpace“ ändern, geben die Texteigenschaften entsprechend andere Werte zurück.

CDATA- und xml:space="preserve"-Teilbaumgrenzen

Im folgenden Beispiel werden die Inhalte von CDATA-Knoten oder „preserve“-Knoten verkettet, da sie nicht an der Normalisierung unwichtiger Leerzeichen beteiligt sind. Zum Beispiel:

n

t Jane n
t Smith ]>n


In diesem Fall sind die Leerzeichen im CDATA-Knoten nein länger mit „unwichtigen“ Leerzeichen „zusammenführen“ und nicht abschneiden. Der Fall „halb erhalten und abgeschnitten“ gibt also Folgendes zurück: Der Inhalt ist irrelevant. Wenn CDATA durch Folgendes ersetzt wird, werden die gleichen Ergebnisse zurückgegeben:

Smith
Entitäten sind speziell

Entitäten werden als Teil der DTD geladen und analysiert und unter dem DOCTYPE-Knoten angezeigt . Sie müssen keinen xml:space-Bereich haben. Beispiel:

Jane n

tn

">
]>

Tag-Bereich), unwichtige Leerzeichen gehen beim Parsen von Entitäten verloren. Der Baum wird angezeigt wie:



DOCTYPE foo
ENTITY: Jane

ELEMENT: Mitarbeiter

ELEMENT: Name
TEXT: Jane

ELEMENT: Titel

TEXT>:Software Design Engineer

ELEMENT: foo

ATTRIBUTE: xml:space="preserve" > ENTITYREF: Jane


Bitte beachten Sie, dass der DOM-Baum, der unter dem ENTITY-Knoten innerhalb des DOCTYPE verfügbar gemacht wird, nicht enthält alle WHITESPACE-Knoten. Dies bedeutet, dass die untergeordneten Knoten des ENTITYREF-Knotens keine WHITESPACE-Knoten haben, auch wenn sich die Entitätsreferenz in der XML befindet. Dasselbe gilt für den Bereich von :space="preserve". In einem bestimmten Dokument wird normalerweise auf denselben Baum verwiesen. Wenn die Entität unbedingt Leerzeichen beibehalten muss, muss sie intern ihr eigenes xml:space-Attribut angeben oder den Schalter „preserveWhiteSpace“ auf „true“ setzen Wie geht man mit Leerzeichen in Attributen um?

Es gibt mehrere Möglichkeiten, auf Attribute zuzugreifen. Die IXMLDOMAttribute-Eigenschaft entspricht den Eigenschaften „nodeValue“ und „text“. Von der Eigenschaft zurückgegebener Text.


 attrNode.nodeValue
 attrNode.value
 getAttribute("name") gibt genau den gleichen Inhalt (und die gleichen erweiterten Entitäten) wie im Originaldokument zurück.
 attrNode.nodeTypedValue Null
 attrNode.text ist dasselbe wie nodeValue, außer dass führende und nachfolgende Leerzeichen abgeschnitten wurden.


Die Spezifikation „XML Language“ definiert das folgende Verhalten für XML-Anwendungen: Vom Attributtyp zurückgegebener Text
CDATA ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, Enumeration

Halbnormalisierung Vollständige Normalisierung

Hier bedeutet Halbnormalisierung die Umwandlung neuer Zeilen und Tabulatorzeichen in Leerzeichen, aber mehrere Leerzeichen werden nicht zu einem Leerzeichen degeneriert.

Das Obige ist der Inhalt der FAQ (3) für den Einstieg in XML. Weitere verwandte Inhalte finden Sie 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