Freigeben über


METHODEN für XML-Codierung und DOM-Schnittstelle

In diesem Artikel werden xml-Codierungs- und DOM-Schnittstellenmethoden beschrieben.

Ursprüngliche Produktversion: Extensible Markup Language
Ursprüngliche KB-Nummer: 275883

Übersicht

Ein hauptvorteil von XML-Daten (Extensible Markup Language) besteht darin, dass es sich um eine unabhängige Plattform handelt. Die richtige Codierung muss jedoch angegeben werden, um die ordnungsgemäße Übertragung von XML-Daten zwischen verschiedenen Plattformen sicherzustellen. Das Whitepaper "Codieren von XML-Daten " behebt allgemeine XML-Codierungsprobleme im Detail: Codieren von XML-Daten.

In den meisten Szenarien stammen XML-Codierungsfehler aus den unterschiedlichen Standardcodierungseinstellungen der XML-Parsermethoden und -schnittstellen. Ein klares Verständnis dieser Standardeinstellungen trägt dazu bei, die Codierungsfehler zu verhindern.

XML-Codierungen

MSXML unterstützt alle Codierungen, die von Internet Explorer unterstützt werden. Die Unterstützung von Internet Explorer hängt davon ab, welche Sprachpakete auf dem Computer installiert sind; diese Informationen werden unter dem Registrierungsschlüssel gespeichert: HKEY_CLASSES_ROOT\MIME\Database\Charset.

MSXML verfügt über systemeigene Unterstützung für die folgenden Codierungen:

UTF-8
UTF-16
UCS-2
UCS-4
ISO-10646-UCS-2
UNICODE-1-1-UTF-8
UNICODE-2-0-UTF-16
UNICODE-2-0-UTF-8
It also recognizes (internally using the WideCharToMultibyte API function for mappings) the following encodings:
US-ASCII
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
WINDOWS-1250
WINDOWS-1251
WINDOWS-1252
WINDOWS-1253
WINDOWS-1254
WINDOWS-1255
WINDOWS-1256
WINDOWS-1257
WINDOWS-1258

Die richtige Stelle zum Angeben der Codierung für die Daten ist die XML-Deklaration. Wenn die Daten beispielsweise mit ISO-8859-1 Standard codiert sind, können Sie folgendes angeben:

<?xml version="1.0" encoding="ISO-8859-1"?>

Ohne diese Informationen ist die Standardcodierung UTF-8 oder UTF-16, abhängig vom Vorhandensein einer UNICODE-Bytereihenfolgemarke (BOM) am Anfang der XML-Datei. Wenn die Datei mit einer UNICODE-Bytereihenfolgemarke (0xFF 0xFE) oder (0xFE 0xFF) beginnt, wird das Dokument als UTF-16-Codierung betrachtet; andernfalls befindet es sich in UTF-8. Die Save-Methode der IXMLDOMDocument Schnittstelle verwaltet die ursprüngliche Codierung des Dokuments. Die Standardeinstellung für diese Methode ist UTF-8.

MSXML DOM-Fehler

Zwei häufige Fehler, die von den XML-Dokumentobjektmodell (DOM)-Schnittstellenmethoden zurückgegeben werden, sind:

  • Ein ungültiges Zeichen wurde im Textinhalt gefunden.

  • Wechseln sie von der aktuellen Codierung zu der angegebenen Codierung, die nicht unterstützt wird.

Bei der Lademethode der IXMLDOMDocument Schnittstelle treten diese Fehler in der Regel unter den folgenden Bedingungen auf:

  • Es wird keine Codierung angegeben, am Anfang der XML-Datei wird kein Bytereihenfolgezeichen gefunden, und die Daten enthalten Sonderzeichen.

  • Die angegebene Codierung stimmt nicht mit der tatsächlichen Codierung der XML-Daten überein. Es empfiehlt sich, immer die richtige Codierung innerhalb der XML-Deklaration anzugeben, anstatt die Standardcodierung zu akzeptieren.

Mit den MSXML-Parserversionen 2.5, 2.5 SP1 und 2.6 kann die loadXML Methode IXMLDOMDocument nur UTF-16- oder UCS-2-codierte Daten laden. Jeder Versuch, XML-Daten zu laden, die mit einem anderen Codierungsformat codiert sind, führt zu folgendem Fehler:

Wechseln sie von der aktuellen Codierung zu der angegebenen Codierung, die nicht unterstützt wird. Mit der Veröffentlichung von MSXML 3.0 (Msxml3.dll) wird diese Einschränkung entfernt, und der folgende Code wird ohne Fehler ausgeführt:

hr = pXMLDoc->loadXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?><tag1>Abcdef</tag1>");

Notiz

Die XML-Eigenschaft der IXMLDOMDocument Schnittstelle schreibt die XML-Daten als UTF-16-codiert, jedoch ohne bytereihenfolgenzeichen am Anfang aus. Dies kann zu Codierungsproblemen führen.

Sie können diese Fehler auch erhalten, wenn Sie die transformNode Methode der IXMLDOMNode Schnittstelle mit einer XSL- oder XSLT-Datei aufrufen, in der die XML-Codierungsinformationen wie folgt angegeben werden:

<xsl:output method="xml" encoding="UTF-8" />

Die transformNode Methode gibt definitionsgemäß einen BSTR zurück, der UTF-16-codierte Daten ist. Eine bessere Möglichkeit, die Codierung beizubehalten, besteht darin, die transformNodeToObject-Methode aufzurufen und die Ergebnisse in einem Datenstrom oder einem neuen XML-Dokument zu speichern und dieses dann zu sichern.

Quellen

System.Xml-Namespace