XML kodlama ve DOM arabirim yöntemleri

Bu makalede XML kodlaması ve DOM arabirim yöntemleri açıklanmaktadır.

Orijinal ürün sürümü: Genişletilebilir biçimlendirme dili
Özgün KB numarası: 275883

Özet

Genişletilebilir Biçimlendirme Dili (XML) verilerinin önemli avantajlarından biri, bağımsız bir platform olmasıdır. Ancak, XML verilerinin farklı platformlar arasında düzgün aktarılmasını sağlamak için doğru kodlama belirtilmelidir. XML Verilerini Kodlama teknik incelemesi, genel XML kodlama sorunlarını ayrıntılı olarak ele alır: XML Verilerini Kodlama.

Çoğu senaryoda, XML kodlama hataları XML ayrıştırıcısı (MSXML) yöntemlerinin ve arabirimlerinin farklı varsayılan kodlama ayarlarından kaynaklanır. Bu varsayılan ayarların net bir şekilde anlaşılması, kodlama hatalarının önlenmesine yardımcı olur.

XML Kodlamaları

MSXML, Internet Explorer tarafından desteklenen tüm kodlamaları destekler. Internet Explorer'ın desteği, bilgisayarda hangi dil paketlerinin yüklü olduğuna bağlıdır; bu bilgiler kayıt defteri anahtarı altında depolanır: HKEY_CLASSES_ROOT\MIME\Database\Charset.

MSXML aşağıdaki kodlamalar için yerel desteğe sahiptir:

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

Verilerin kodlamasını belirtmek için uygun yer XML bildirimidir. Örneğin, veriler standart olarak ISO-8859-1 kodlanmışsa, bunu aşağıdaki gibi belirtebilirsiniz:

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

Bu bilgiler olmadan, XML dosyasının başında unicode bayt sırası işaretinin (BOM) varlığına bağlı olarak varsayılan kodlama UTF-8 veya UTF-16'dır. Dosya bir UNICODE bayt sırası işareti (0xFF 0xFE) veya (0xFE 0xFF) ile başlıyorsa, belge UTF-16 kodlamasında kabul edilir; aksi takdirde UTF-8'dedir. Arabirimin IXMLDOMDocument Save yöntemi, belgenin özgün kodlamasını korur. Bu yöntemin varsayılan değeri UTF-8'dir.

MSXML DOM Hataları

XML Belge Nesne Modeli (DOM) arabirim yöntemlerinden döndürülen iki yaygın hata şunlardır:

  • Metin içeriğinde Geçersiz bir karakter bulundu.

  • Geçerli kodlamadan belirtilen kodlamaya geçme desteklenmiyor.

Arabirimin yük yönteminde IXMLDOMDocument bu hatalar genellikle aşağıdaki koşullarda oluşur:

  • Kodlama belirtilmedi, XML dosyasının başında bayt sırası işareti bulunamadı ve veriler özel karakterler içeriyor

  • Belirtilen kodlama, XML verilerinin gerçek kodlaması ile eşleşmiyor. İyi bir uygulama, varsayılan kodlamayı kabul etmek yerine her zaman XML bildirimi içinde doğru kodlamayı belirtmektir.

MSXML ayrıştırıcı sürümleri 2.5, 2.5 SP1 ve 2.6 ile yöntemi loadXMLIXMLDOMDocument yalnızca UTF-16 veya UCS-2 ile kodlanmış verileri yükleyebilir. Başka bir kodlama biçimiyle kodlanmış XML verilerini yükleme girişimi aşağıdaki hatayla sonuçlanır:

Geçerli kodlamadan belirtilen kodlamaya geçme desteklenmiyor. MSXML 3.0 (Msxml3.dll) sürümüyle bu kısıtlama kaldırılır ve aşağıdaki kod hatasız çalışır:

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

Not

Arabirimin IXMLDOMDocument xml özelliği, XML verilerini UTF-16 kodlanmış olarak ancak başlangıçta bayt sırası işareti olmadan yazar. Bu, kodlama sorunlarına yol açabilir.

Xml kodlama bilgilerinin aşağıdaki gibi belirtildiği bir XSL veya XSLT dosyasıyla arabiriminin yöntemini IXMLDOMNode çağırdığınızda transformNode da bu hataları alabilirsiniz:

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

yöntemi, transformNode tanımına göre UTF-16 ile kodlanmış veriler olan bir BSTR döndürür. Kodlamayı korumanın daha iyi bir yolu yöntemini çağırmak transformNodeToObject ve sonuçları bir akışa veya yeni bir XML belgesine depolamak ve sonra kaydetmektir.

Başvurular

System.Xml Ad Alanı