Autor: AngelGavin Quelle: CSDN
Wie lade ich Dokumente mit Fremd- und Sonderzeichen?
Dokumente können Fremdzeichen enthalten, wie zum Beispiel:
fremde Schriftzeichen (úóí?)
Beispielsweise muss Fremdzeichen wie 粲 eine Escape-Sequenz vorangestellt werden. Fremde Zeichen können wie folgt UTF-8-kodiert oder mit einer anderen Kodierung angegeben werden:
fremde Zeichen (?磲)
Das XML wird jetzt korrekt geladen.
Andere Zeichen sind in XML reserviert und müssen anders behandelt werden. XML unten:
Dies und das
Der folgende Fehler tritt auf:
Hier sind keine Leerzeichen erlaubt.
Zeile 0000001: Dies und das
Standort 0000012: ----------^
Hier ist & Teil der XML-Syntaxstruktur. Wenn es nur innerhalb der XML-Datenquelle platziert wird, kann es nicht als & interpretiert werden. Sie müssen spezielle Zeichenfolgen namens „Entitäten“ ersetzen.
Dies und 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 wird beispielsweise einen Fehler zurückgeben:
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 die Entität einfügen.
Beide oben genannten Methoden geben den Attributwert John's Stuff über die getAttribute-Methode im XML-Objektmodell 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 Beispiel zeigt das XML-Objektmodell den CDATA-Knoten als untergeordneten Knoten des XML-Knotens an, der die Zeichenfolge „
This & that is just „text““ zurückgibt.
als nodeValue.
Wie verwende ich die MSXML-COM-Komponente in Visual Studio 6.0 C++?
Der einfachste Weg, MSXML-COM-Komponenten in Visual C++ 6.0 zu verwenden, ist die Verwendung der #import-Direktive:
#import "msxml.dll" benannte_guids no_namespace#import "msxml.dll" benannte_guids no_namespace
Es definiert alle IXML*-Schnittstellen und Schnittstellen-IDs, damit sie in Anwendungen verwendet werden können. Die MSXML-Typbibliothek und Header-Dateien (in Englisch) sowie uuid.lib mit Klassen-IIDs sind ebenfalls im INETSDK verfügbar.
Wie verwende ich HTML-Entitäten in XML?
Das folgende XML enthält HTML-Entitäten:
Copyright ? 2000, Microsoft Inc., Alle Rechte vorbehalten.
Es kommt zu folgendem Fehler:
Verweis auf die undefinierte Entität „Kopie“.
Zeile: 1, Position: 23, Fehlercode: 0xC00CE002
Urheberrecht ? 2000, ...
---------^
Dies liegt daran, dass XML nur über fünf integrierte Entitäten verfügt. Weitere Informationen zu integrierten Entitäten finden Sie unter Wie lade ich Dokumente mit Fremd- und Sonderzeichen? .
Um HTML-Entitäten verwenden zu können, müssen Sie diese mit einer DTD definieren. Weitere Informationen zu DTDs finden Sie in den XML-Empfehlungen des W3C (auf Englisch). Um diese DTD zu verwenden, fügen Sie sie wie folgt direkt in das DOCTYPE-Tag ein:
Copyright ? 2000, Microsoft Inc., Alle Rechte vorbehalten.
Um es zu laden, müssen Sie das Attribut „validateOnParse“ der IXMLDOMDocument-Schnittstelle deaktivieren. 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, müssen die HTML-Entitäten, die Parameter-Entitäten sind, wie folgt in die vorhandene DTD aufgenommen werden:
%HTMLENT;
%HTMLENT;
Es definiert alle HTML-Entitäten, sodass sie in XML-Dokumenten verwendet werden können.
Wie gehe ich mit Leerzeichen im Elementinhalt um?
Das XML-DOM verfügt über drei Möglichkeiten, auf den Textinhalt von Elementen zuzugreifen:
Attributverhalten
nodeValue Gibt den ursprünglichen Textinhalt (einschließlich Leerzeichen) auf TEXT-, CDATA-, COMMENT- und PI-Knoten zurück, wie in der ursprünglichen XML-Quelle angegeben. Für ELEMENT-Knoten und DOCUMENT selbst wird null zurückgegeben.
Daten wie nodeValue
Text Repeat verketten mehrere TEXT- und CDATA-Knoten im angegebenen Teilbaum und geben das kombinierte Ergebnis zurück.
Hinweis: Zu den Leerzeichen gehören Zeilenumbrüche, Tabulatoren und Leerzeichen.
Die Eigenschaft „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 verkettet den gesamten Text im angegebenen Teilbaum und erweitert die Entität. Dies hängt davon ab, wie das Dokument geladen wird, dem aktuellen Status des Schalters „preserveWhiteSpace“ und dem aktuellen xml:space-Bereich, siehe unten:
„preserveWhiteSpace = true“, wenn das Dokument geladen wird
PreserveWhiteSpace=true | PreserveWhiteSpace=True PreserveWhiteSpace | =False | PreserveWhiteSpace=False |
xml: | space | = | Preserve |
xml | : | Space | = |
Standard
PreserveWhiteSpace=true | PreserveWhiteSpace=True PreserveWhiteSpace= | FALSE | PreserveWhiteSpace=FALSE |
xml: | space | = | Preserve |
xml | : | Space | = |
Standard bedeutet und Der exakt gleiche ursprüngliche Textinhalt im ursprünglichen XML-Dokument, abgeschnitten bedeutet, dass führende und nachfolgende Leerzeichen entfernt wurden, halberhaltend bedeutet, dass „signifikante Leerzeichen“ erhalten bleiben und „unwichtige Leerzeichen“ normalisiert werden. Wichtige Leerzeichen sind Leerzeichen innerhalb des Textinhalts. Unwichtige Leerzeichen sind die Leerzeichen zwischen Token, die wie folgt aussehen:
n
tJanen
tSmith n
In diesem Beispiel ist Rot ein unwichtiges Leerzeichen, das ignoriert werden kann, während Grün ein wichtiges Leerzeichen ist, da es Teil des Textinhalts ist und daher eine wichtige Bedeutung hat, die nicht ignoriert werden kann. In diesem Beispiel gibt die Texteigenschaft also Folgendes zurück:
Der Statusrückgabewert bleibt „nt JanentSmith n“.
„JanentSmith“ beibehalten und abschneiden
Halbreserviert „Jane Smith“
„Jane Smith“ halb beibehalten und abschneiden.
Beachten Sie, dass durch „Halb beibehalten“ unwichtige Leerzeichen normalisiert werden, z. B. werden Zeilenumbrüche und Tabulatorzeichen auf ein einzelnes Leerzeichen reduziert. 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 „reservierten“ Knoten verkettet, da sie nicht an der Normalisierung unwichtiger Leerzeichen beteiligt sind. Zum Beispiel:
N
t Jane n
t Smith ]>n
In diesem Fall werden Leerzeichen innerhalb des CDATA-Knotens nicht mehr mit „unwichtigen“ Leerzeichen „zusammengeführt“ und nicht abgeschnitten. Der Fall „halb erhalten und abgeschnitten“ gibt also Folgendes zurück:
„Jane Smith“
Hier werden unwichtige Leerzeichen zwischen den Tags und eingefügt, unabhängig vom Inhalt des CDATA-Knotens. Wenn Sie CDATA durch Folgendes ersetzen, wird das gleiche Ergebnis zurückgegeben:
Smith
Entitäten sind spezielle
Entitäten, die als Teil der DTD geladen und analysiert und unter dem DOCTYPE-Knoten angezeigt werden. Sie müssen keinen xml:space-Bereich haben. Zum Beispiel:
Janen
tn
">
]>
&Jane;
Unter der Annahme „preserveWhiteSpace=false“ (im DOCTYPE-Tag-Bereich) gehen beim Parsen von Entitäten unwichtige Leerzeichen verloren. Entitäten haben keine Leerzeichenknoten. Der Baum wird so aussehen:
DOCTYPE foo
ENTITÄT: Jane
ELEMENT: Mitarbeiter
ELEMENT: Name
TEXT: Jane
ELEMENT: Titel
TEXT>:Software-Design-Ingenieur
ELEMENT: foo
ATTRIBUT: xml:space="preserve"
ENTITYREF: Jane
Beachten Sie, dass der DOM-Baum, der unter dem ENTITY-Knoten innerhalb des DOCTYPE verfügbar gemacht wird, keine WHITESPACE-Knoten enthält. Dies bedeutet, dass die untergeordneten Knoten des ENTITYREF-Knotens auch keine WHITESPACE-Knoten haben, selbst wenn die Entitätsreferenz im Gültigkeitsbereich von xml:space="preserve" liegt.
Jede Instanz von ENTITY, auf die in einem bestimmten Dokument verwiesen wird, hat normalerweise denselben Baum.
Wenn eine Entität Leerzeichen unbedingt beibehalten muss, muss sie intern ihr eigenes xml:space-Attribut angeben oder der Schalter „preserveWhiteSpace“ des Dokuments muss auf „true“ gesetzt werden.
Wie gehe ich mit Leerzeichen in Attributen um?
Es gibt verschiedene Möglichkeiten, auf Eigenschaftswerte zuzugreifen. Die IXMLDOMAttribute-Schnittstelle verfügt über ein nodeValue-Attribut, das den nodeValue- und text-Attributen als Microsoft-Erweiterung entspricht. Diese Eigenschaften geben Folgendes zurück: Der von der Eigenschaft zurückgegebene Text
attrNode.nodeValue
attrNode.value
getAttribute("name") gibt genau denselben Inhalt (und erweiterte 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 folgendes Verhalten für XML-Anwendungen: Attributtypen Zurückgegebener Text CDATA ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, Enumeration
Halbnormalisierung Vollständige Normalisierung
Dabei stellt die Halbnormalisierung die Konvertierung von Zeilenumbrüchen und Tabulatorzeichen dar ist ein Leerzeichen, aber mehrere Leerzeichen degenerieren nicht zu einem Leerzeichen.