PDA

View Full Version : XMLDocument



_alish_
سه شنبه 17 آذر 1383, 10:51 صبح
با سلام خدمت دوستان
چطور می شود با کامپوننت XMLDocument یک Node CDATA ایجاد کنم و یک Stream را در آن قرار دهم
ممنون

hps
سه شنبه 17 آذر 1383, 11:49 صبح
سلام

براى ایجاد یه Node جدید هر نوعى که باشه باید از TXMLDocument.CreateNode استفاده کنى، حالا براى درست کردن CDATA پارامتر NodeType رو ntCData انتخاب مى‌کنى. براى تعیین مقدار CDATA هم باید مقدار Stream رو توى یه دون String بریزى و به پارامتر NameOrData پاس کنى.

نکته اول: توى تبدیل محتواى Stream به String باید دقت کنى چون XML API توى Delphi همه Stringها رو Unicode در نظر مى‌گیره، بنابراین اگه محتواى Stream متنى باشه باید اون رو به Unicode تبدیل کنى وگرنه Encoding محتواى XML خراب مى‌شه.

نکته دوم: توى CDATA باید از علائم و نشانه‌هاى Text استفاده کنى یعنى مثلا نمى‌تونى کاراکترهاى زیر 32 رو نمایش بدى. این مساله وقتى جدى مى‌شه که Stream متنى نباشه و یه فایل Binary باشه.


موفق باشى
حسین

_alish_
جمعه 20 آذر 1383, 15:47 عصر
ممنون ولی NodeType بصورت ReadOnly می باشد
لطفا از دوستان اگر کسی می دانند مرا راهنمایی نمایید
تشکر

hps
جمعه 20 آذر 1383, 19:20 عصر
دوست عزیز NodeType پارامتر TXMLDocument.CreateNode نه IXMLNode.NodeType. حداقل یه بار راهنماى این Method رو نگاه کن.

_alish_
یک شنبه 22 آذر 1383, 07:43 صبح
آقای پور سلطانی از راهنمایتان ممنونم
ولی در تبدیل استریم به رشته برای ورود به CData به کاراکتر خاصی بر خوردم که رشته کامل را در CData قطع کرده و باعث می شود تنها یک خط از رشته Stream وارد آن شود من برای حل آن از Encrypt استفاده کردم آیا راه حل دیگری به نظرتان می رسد که Parser به این کاراکتر قبل از ورود به CData دقت نکند
تشکر

hps
یک شنبه 22 آذر 1383, 08:25 صبح
دو نکته‌اى که در پاسخ اول ذکر کرده بودم به همین دلیل بود. اون کاراکتر خاص هم احتمالا باید شماره 13 (CR) یا شماره 10 (LF) باشه. براى تبدیل اطلاعات Binary به Text مى‌تونید از Base64 Encoding استفاده کنید. مستندات این Encoding رو مى‌تونید روى اینترنت پیدا کنید (سایت W3C بخش HTML)