Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die vollständige Erklärung von Leerzeichen in XML

Detaillierte Einführung in die vollständige Erklärung von Leerzeichen in XML

黄舟
黄舟Original
2017-03-04 17:06:321492Durchsuche

Tipps: Ich habe den Kernteil der Erklärung der Leerzeichen in „XSLT vom Anfänger zum Meister“ extrahiert, um ihn als Ausgangspunkt zu verwenden. Ich hoffe, dass sich jeder aktiv an der Diskussion beteiligen kann. Sprechen Sie über Ihr Verständnis von Räumen.

Nur ​​für Wissenschaftler geeignet, die ein gewisses Verständnis der XML-Dateistruktur haben, nicht für Anfänger geeignet. Bitte von oben nach unten lesen.


Für HTML-Dateien sind Leerzeichen nicht wichtig; für XML ist die Standardposition jedoch die Beibehaltung von Leerzeichenknoten (eine Erläuterung der Leerzeichenknoten finden Sie weiter unten).


Laut XML-Spezifikation ist das sogenannte Leerzeichen eine beliebige Folge von vier Zeichen:
-------------------- - --
Leerzeichen (Leerzeichen), der entsprechende Zeichenwert ist #x20
Rückgabezeichen (Carriage Return), der entsprechende Zeichenwert ist #xD
Neuzeilenzeichen (Newline), der entsprechende Zeichenwert ist #xA
Tabulatorzeichen (Tab), der entsprechende Zeichenwert ist #x9.

Die Leerzeichen in der XML-Datei bilden auch Knoten, bei denen es sich um Leerzeichenknoten handelt. Raumknoten gehören zum Textknotentyp.

Bei XML und XSLT treten bei Raumknoten zwei Probleme auf:
---------------------------------------
1. Um zu bestimmen, welche Leerzeichen in der XML-Eingabedatei wichtig sind, muss der XSLT-Prozessor diese Leerzeichenknoten sehen. Der Schlüssel zur Entscheidung ist das Attribut xml:space.
2. Bestimmen Sie, welche Leerzeichen in der XSL-Vorlagendatei wichtig sind, die der XSLT-Prozessor in den Ergebnisbaum kopieren soll. Der Schlüssel zur Entscheidung sind die beiden Befehle xsl:strip-space
und xsl:PReserve-space.


"Wichtige und unwichtige Raumknoten"
-----------------------------------------
Wenn jemand Der Inhalt einer Komponente kann nur Komponenten enthalten, dann sind die Raumknoten in der Komponente unbedeutend.
Wenn der Inhalt einer Komponente vom Typ #PCDATA ist, sollten die darin enthaltenen Raumknoten als wichtig (signifikant) angesehen werden.
Wenn der Komponenteninhalt eine Mischung aus Textinhalt und Komponenten ist, kann dies nicht beurteilt werden. Dies sollte von der semantischen Bedeutung der Komponente und ihrem Inhalt abhängen.


Bevor der xslt-Prozessor mit der XML-Eingabedatei in Kontakt kommt, wird diese vom XML-Parser analysiert
———————————————— ————————————— ---
(1) Das xml:space-Attribut kann den Modus der Verarbeitung von Space-Knoten durch nachfolgende XML-Anwendungen ändern. Beispielsweise wird der xslt-Prozessor davon beeinflusst das xml:space-Attribut.
(2) Die Endsymbole am Ende einer Spaltenmarkierung oder eines Inhalts in der XML-Datei werden durch ein einzelnes Zeilenumbruchzeichen (#xA) ersetzt.
(3) Bevor der Attributwert an die XML-Anwendung übergeben wird, sollte der XML-Parser auch standardisierte Operationen am Attributwert durchführen. Dies liegt daran, dass verschiedene Betriebssysteme unterschiedliche Kombinationen der Endzeichen jeder Textzeile haben. Beispielsweise endet das Windows-System mit dem Rückgabezeichen und dem neuen Zeilenzeichen, während das Unix-System nur mit der neuen Zeilenzeichengruppe endet
-Symbol. Nachdem der XML-Parser die XML-Datei gelesen hat, ersetzt er zunächst alle Endsymbole durch ein einziges neues Zeilenzeichen. Dies vereinheitlicht nicht nur die Unterschiede im Design verschiedener Endsymbole zwischen verschiedenen Systemen, sondern vereinfacht auch die Bedienungsschwierigkeiten nachfolgender XML-Anwendungen . Einen solchen Vorgang nennt man „Normalisierung“.
a, das Endsymbol jeder Textspalte muss auf ein einzelnes Zeilenumbruchzeichen (#xA) normalisiert werden.
b, jedes Leerzeichen (#x20, #xD, #xA, #x9) sollte durch ein Leerzeichen (#x20) ersetzt werden.
c. Wenn der Attributwert einen Wortparametercode enthält, sollte er durch dieses Referenzzeichen ersetzt werden. Beispielsweise wird durch ein neues Zeilenzeichen ersetzt.
d. Wenn der Attributwert eine Entitätsreferenz enthält, sollte er durch seinen Ersetzungstext ersetzt werden.
d. h. alle anderen Zeichen sollten direkt in den normalisierten Attributwert eingefügt werden.
f. Wenn der Attributtyp nicht CDATA ist, sollte der XML-Parser außerdem die Leerzeichenfolge vor und nach dem Attributwert löschen sollte ebenfalls durch ein einzelnes Leerzeichen ersetzt werden.


Nachdem der XSLT-Prozessor den Strukturbaum der XML-Eingabedatei und der XSL-Vorlagendatei erstellt hat, führt er die benachbarten Textknoten in der Komponente zu einem einzelnen Textknoten zusammen und führt dann einige Textknoten zusammen . Wenn der Textknoten jedoch eine der folgenden Bedingungen erfüllt, wird er beibehalten:
-----------------
(1) Die übergeordnete Komponente des Textes Der Knoten ist ein Mitglied des Satzes von Elementnamen, die Leerzeichen erhalten.
(2) Der Textknoten enthält mindestens ein Nicht-Leerzeichen.
(3) Es gibt ein xml:space-Attribut in einer Vorfahrenkomponente des Textknotens, sein Wert lautet „preserve“ und es gibt keinen anderen xml:space-Attributwert in der aktuellen Vorfahrenkomponente, der standardmäßig ist. Andere Textknoten werden entfernt.


Für XSL-Vorlagen ist nur eine xsl:text-Komponente im sogenannten platzerhaltenden Komponentennamensatz verfügbar. Die Raumknoten in der XSL-Vorlagendatei werden gelöscht, aber wenn die Raumknoten in der xsl:text-Komponente erscheinen, bleiben sie erhalten.

Das Obige ist eine detaillierte Einführung in die vollständige Erklärung von Leerzeichen 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