Penulis: AngelGavin Sumber: CSDN
Bagaimana cara memuat dokumen dengan karakter asing dan khusus?
Dokumen dapat berisi karakter asing, seperti:
karakter asing (úóí?)
Misalnya, karakter asing seperti 粲 harus diawali dengan escape sequence. Karakter asing dapat dikodekan UTF-8 atau ditentukan dengan pengkodean berbeda, sebagai berikut:
karakter asing (?磲)
XML sekarang dimuat dengan benar.
Karakter lain dicadangkan dalam XML dan perlu ditangani secara berbeda. XML di bawah ini:
Ini & itu
Terjadi kesalahan berikut:
Tidak ada spasi yang diperbolehkan di sini.
Baris 0000001: Ini & itu
Lokasi 0000012: ----------^
Di sini & adalah bagian dari struktur sintaks XML. Jika hanya ditempatkan di dalam sumber data XML, maka tidak dapat diartikan sebagai &. Anda perlu mengganti urutan karakter khusus yang disebut "entitas".
Ini & itu
Karakter berikut memerlukan entitas yang sesuai:
< <
& &
>>
" "
''
Karakter kutipan digunakan sebagai pembatas nilai atribut dalam markup dan oleh karena itu umumnya tidak dapat digunakan di dalam nilai atribut. Misalnya, berikut ini akan menghasilkan kesalahan:
Kutipan tunggal di sini digunakan sebagai pembatas atribut dan dalam nilai atribut itu sendiri. Untuk memperbaiki masalah ini, Anda dapat mengubah pembatas atribut menjadi tanda kutip ganda:
atau Anda dapat melepaskan tanda kutip tunggal ke entitas.
Kedua metode di atas akan mengembalikan nilai atribut Barang John melalui metode getAttribute dalam model objek XML. Begitu juga untuk tanda petik ganda bisa menggunakan entitas ".
Anda juga dapat menangani karakter khusus dalam konten elemen dengan menempatkan teks di bagian CDATA. Yang berikut ini benar:
Dalam contoh ini, model objek XML menampilkan node CDATA sebagai node anak dari node xml, yang mengembalikan string
Ini & itu hanya konten "teks".
sebagai nilai simpul.
Bagaimana cara menggunakan komponen MSXML COM di Visual Studio 6.0 C++?
Cara termudah untuk menggunakan komponen MSXML COM di Visual C++ 6.0 adalah dengan menggunakan arahan #import:
#import "msxml.dll" bernama_guids no_namespace#import "msxml.dll" bernama_guids no_namespace
Ini mendefinisikan semua antarmuka IXML* dan ID antarmuka sehingga dapat digunakan dalam aplikasi. Pustaka tipe MSXML dan file header (dalam bahasa Inggris) juga tersedia dari INETSDK, serta uuid.lib yang berisi IID kelas.
Bagaimana cara menggunakan entitas HTML dalam XML?
XML berikut berisi entitas HTML:
Hak Cipta ? 2000, Microsoft Inc, Semua hak dilindungi undang-undang.
Ini menghasilkan kesalahan berikut:
Referensi ke 'salinan' entitas yang tidak ditentukan.
Baris: 1, Posisi: 23, Kode kesalahan: 0xC00CE002
Hak Cipta ? 2000, ...
-----------------------^
Hal ini karena XML hanya memiliki lima entitas bawaan. Untuk informasi selengkapnya tentang entitas bawaan, lihat Bagaimana cara memuat dokumen dengan karakter asing dan karakter khusus? .
Untuk menggunakan entitas HTML, Anda perlu mendefinisikannya dengan DTD. Untuk informasi lebih lanjut tentang DTD, lihat Rekomendasi XML W3C (dalam bahasa Inggris). Untuk menggunakan DTD ini, masukkan langsung ke dalam tag DOCTYPE, seperti berikut:
Hak Cipta ? 2000, Microsoft Inc, Semua hak dilindungi undang-undang.
Untuk memuatnya, Anda perlu mematikan atribut validasiOnParse dari antarmuka IXMLDOMDocument. Coba paste ke Halaman Uji Validator, matikan validasi DTD, dan klik Validasi. Perhatikan bahwa dokumen dimuat dan karakter hak cipta muncul di pohon DOM di akhir halaman validator.
Jika validasi DTD telah selesai, maka entitas HTML yang merupakan entitas parameter harus disertakan dalam DTD yang ada sebagai berikut:
%HTMLEN;
%HTMLEN;
Ini akan mendefinisikan semua entitas HTML sehingga dapat digunakan dalam dokumen XML.
Bagaimana cara menangani karakter spasi putih dalam konten elemen?
XML DOM memiliki tiga cara mengakses konten tekstual elemen:
Perilaku Atribut
nodeValue Mengembalikan konten tekstual asli (termasuk karakter spasi putih) pada node TEXT, CDATA, COMMENT, dan PI seperti yang ditentukan dalam sumber XML asli. Untuk node ELEMENT dan DOCUMENT itu sendiri, null dikembalikan.
Data Sama seperti nodeValue
Text Repeat menggabungkan beberapa node TEXT dan CDATA dalam subpohon yang ditentukan dan mengembalikan hasil gabungan.
Catatan: Karakter spasi mencakup baris, tab, dan spasi baru.
Properti nodeValue biasanya mengembalikan konten dokumen asli, terlepas dari cara dokumen dimuat dan cakupan xml:space saat ini.
Atribut text menggabungkan semua teks dalam subpohon tertentu dan memperluas entitas. Hal ini terkait dengan cara dokumen dimuat, status sakelar melestarikanWhiteSpace saat ini, dan cakupan xml:space saat ini, lihat di bawah:
melestarikanWhiteSpace = true saat dokumen dimuat
melestarikanWhiteSpace=benar | melestarikanWhiteSpace=benar | melestarikanWhiteSpace=false | melestarikanWhiteSpace=false |
xml:space=preserve | xml:space=default | xml:space=preserve | xml:space=default |
melestarikan | melestarikan | melestarikan | melestarikan dan memotong |
melestarikanWhiteSpace = false ketika dokumen dimuat
melestarikanWhiteSpace=benar | melestarikanWhiteSpace=benar | melestarikanWhiteSpace=salah melestarikanWhiteSpace= | false |
xml:space=preserve | xml:space=default | xml:space=preserve | xml:space=default |
setengah melestarikan | setengah melestarikan dan memotong | setengah melestarikan | setengah melestarikan dan memotong |
melestarikan di sini berarti dan Konten teks asli yang sama persis dalam dokumen XML asli, makna terpotong di awal dan akhir spasi telah dihapus, semi-dipertahankan yang berarti "karakter spasi penting" dipertahankan dan "karakter spasi tidak penting" dinormalisasi. Karakter spasi putih penting adalah karakter spasi putih dalam konten teks. Karakter spasi yang tidak penting adalah karakter spasi antar token, tampilannya seperti ini:
n
tJanen
tSmith n
Dalam contoh ini, warna merah merupakan karakter spasi putih yang tidak penting dan dapat diabaikan, sedangkan hijau merupakan karakter spasi putih yang penting karena merupakan bagian dari konten teks sehingga memiliki arti penting yang tidak dapat diabaikan. Jadi dalam contoh ini, properti text mengembalikan yang berikut:
Nilai pengembalian status tetap "nt JanentSmith n"
Simpan dan potong "JanentSmith"
"Jane Smith" semi-reservasi
Pertahankan setengah dan potong "Jane Smith"
Perhatikan bahwa "pertahankan setengah" akan menormalkan karakter spasi yang tidak penting, misalnya, karakter baris baru dan tab akan dikurangi menjadi satu spasi. Jika Anda mengubah atribut xml:space dan saklar preservWhiteSpace, properti teks akan mengembalikan nilai yang berbeda.
CDATA dan xml:space="preserve" batas subpohon
Dalam contoh berikut, konten node CDATA atau node "yang dicadangkan" akan digabungkan karena tidak berpartisipasi dalam normalisasi karakter spasi yang tidak penting. Misalnya:
N
t Jane n
t Smith ]>n
Dalam hal ini, karakter spasi di dalam node CDATA tidak lagi "digabung" dengan karakter spasi "tidak penting" dan tidak terpotong. Jadi case "setengah terpelihara dan terpotong" akan menghasilkan yang berikut:
"Jane Smith"
Di sini, karakter spasi yang tidak penting di antara tag dan akan disertakan, terlepas dari isi node CDATA. Jika Anda mengganti CDATA dengan yang berikut ini, hasil yang sama akan dikembalikan:
Smith
Entitas adalah entitas khusus
yang dimuat dan diuraikan sebagai bagian dari DTD dan ditampilkan di bawah node DOCTYPE. Mereka tidak harus memiliki lingkup xml:space. Misalnya:
Janen
tn
">
]>
&Jane;
Dengan asumsi preservWhiteSpace=false (dalam cakupan tag DOCTYPE), karakter spasi yang tidak penting akan hilang saat mengurai entitas. Entitas tidak akan memiliki node karakter spasi putih. Pohon itu akan terlihat seperti:
DOCTYPE foo
ENTITAS: Jane
ELEMEN: karyawan
ELEMEN: nama
TEKS: Jane
ELEMEN: judul
TEKS>: Insinyur Desain Perangkat Lunak
ELEMEN: foo
ATRIBUT: xml:space="pertahankan"
REF ENTITA: Jane
Perhatikan bahwa pohon DOM yang diekspos di bawah node ENTITY di dalam DOCTYPE tidak berisi node WHITESPACE apa pun. Ini berarti bahwa node anak dari node ENTITYREF juga tidak memiliki node WHITESPACE, meskipun referensi entitas berada dalam cakupan xml:space="preserve".
Setiap contoh ENTITY yang direferensikan dalam dokumen tertentu biasanya memiliki pohon yang sama.
Jika suatu entitas harus benar-benar mempertahankan karakter spasi putih, maka entitas tersebut harus menentukan atribut xml:space miliknya sendiri secara internal, atau saklar melestarikanWhiteSpace dokumen harus disetel ke true.
Bagaimana cara menangani karakter spasi putih dalam atribut?
Ada beberapa cara untuk mengakses nilai properti. Antarmuka IXMLDOMAttribute memiliki atribut nodeValue, yang setara dengan atribut nodeValue dan teks sebagai ekstensi Microsoft. Properti ini mengembalikan: Teks yang dikembalikan oleh properti
attrNode.nodeValue
attrNode.nilai
getAttribute("name") mengembalikan konten yang sama persis (dan entitas yang diperluas) seperti pada dokumen asli.
attrNode.nodeTypedValue Null
attrNode.text sama dengan nodeValue hanya saja karakter spasi di awal dan akhir telah terpotong.
Spesifikasi "Bahasa XML" mendefinisikan perilaku berikut untuk aplikasi XML: Tipe atribut Teks yang dikembalikan ID CDATA, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, enumeration
Semi-normalisasi Normalisasi penuh
Di sini semi-normalisasi mewakili konversi baris baru dan karakter tab adalah sebuah ruang, tetapi banyak ruang tidak akan merosot menjadi satu ruang.