PDA

View Full Version : ذخیره صحیح xml



yaas135
دوشنبه 07 شهریور 1384, 12:45 عصر
سلام
من با استفاده از ایکس ام ال داکیومنت دلفی دارم، ایکس ام تولید و ذخیره می کنم. اما وقتی داخل یه اتربیوت، متنی رو که بعضی از نشانه ها مثل <> رو داشته باشه، این متن ایکس ام الش درست ذخیره میشه، اما متن ایکس ام رو وقتی توی نت پد می بینیم، اون علامت ها مشکل دار ذخیره میشه:
من با این دستور ایکس ام می سازم:
MLDocument1.DocumentElement := XMLDocument1.CreateNode('main element');
newsnode := XMLDocument1.DocumentElement.AddChild('Story');
datatimenode := newsnode.AddChild('today');
datatimenode.SetAttributeNS('mesal','','<salam>');
Memo11.Lines.Text := FormatXMLData(XMLDocument1.XML.Text);
Memo11.Lines.Insert(0,'<?xml version="1.0" encoding="UTF-8"?>');
Memo11.Lines.SaveToFile('h:\main.xml

همون طور که می نبید، من سلام رو داخل به نشونه گذاشتم<salam>، وقتی به صورت ایکس ام ذخیره میشه درست نمایش داده میشه ، اما وقتی نوت پد می بنیمش اون سلام به این صورت ذخیره شده:
http://www.barnamenevis.org/forum/attachment.php?attachmentid=596&stc=1

مثل عکس ضمیمه
میشه کمک کنید؟ ممنونم

Naficy
دوشنبه 07 شهریور 1384, 16:25 عصر
خب این نشون می ده که همه چیز داره درست کار می کنه و مشکلی نیست!!!
علامات خاص در XML طبق قواعدی ذخیره می شوند. (اگر کمی دقت کنید چاره ای جز این نیست که علاماتی مثل " یا < یا > که مفهوم خاصی برای XML دارند به شیوه ای جایگزین شوند.)

yaas135
دوشنبه 07 شهریور 1384, 17:15 عصر
کجا میشه این کار رو کرد؟ !!! یعنی جایگزینی رو من وقتی ذخیره اش می کنم ، میخوام با xsl نمایشش بدم، اونم که نمیتونه جایگزین کنه

Naficy
سه شنبه 08 شهریور 1384, 12:53 عصر
منظور من این نبود که شما باید چیزی را جایگزین کنید. این کار خود به خود انجام می شود. منظور من این است که XML برای ذخیره ی کاراکتری مثل کوتیشن یا... که مفهوم خاصی برایش دارد ناچار است آنرا به گونه ای دیگر بنویسد.

یه مثال می زنم شاید به نتیجه برسیم:
مثال:

&lt;MyTag MyAttrib="It's too interesting to use "xml=Extensible Markup Language" as a database!"&gt;
در مثال بالا نویسنده منظورش این بوده که تمام جمله It's too interesting to use "xml=Extensible Markup Language" as a database را به عنوان مقدار خصوصیت MyAttrib تعریف کند،
اما اگر کمی به مثال بالا دقت کنید، متوجه می شوید که تنها عبارت It's too interesting to use درون این خصوصیت قرار می گیرد و چون کاراکتر کوتیشن وجود دارد، همین جا مقدار MyAttrib تمام شده است.
تنها راه حل، جایگزین کردن کاراکتر کوتیشن متن بالا با یک عبارت دیگر مثل &quot; است. یعنی:

&lt;MyTag MyAttrib="It's too interesting to use &amp;quot;xml=Extensible Markup Language&amp;quot; as a database!"&gt;
این شیوه جایگزینی جزو استاندارد XML تعریف شده است و هر برنامه ای که با XML کار می کند موظف به رعایت آن است. مطمئن باشید هر برنامه ای هنگام خواندن متن XML تبدیل &quote; به کاراکتر کوتیشن و امثال آن را انجام می دهد. (اگر چنین نکند اشکال برنامه است!)

با این اوصاف، مشکل شما چیست؟

yaas135
سه شنبه 08 شهریور 1384, 14:07 عصر
یعنی هیچ کاری نمی شه کرد برای این که خود نماد <> رو تکست باز می کنیم، درست ببینمش؟

Naficy
سه شنبه 08 شهریور 1384, 16:41 عصر
خیر چنان کاری اشتباه است.
اما من متوجه نمی شوم مشکل شما چیست؟ چرا نحوه ذخیره شدن برای شما مهم است؟