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 loadXML
IXMLDOMDocument
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.