في بعض الأحيان ، نحتاج فقط إلى استخدام XML كبعض التطبيقات الصغيرة ، مثل توفير السجلات أو بعض التكوينات. يحتوي مربع Delphi على ملف XML القراءة والكتابة المباشرة (أمثلة ورمز) ، ووظائفه الأساسية هي وظيفتين التاليتين (قراءة واحدة وكتابة واحدة):
{------------------------------------------- ---------------------------- fun/pro: getxmlnodevalue@date: 2004.12.11@param: xmlfilexml 文件param: xmlnodepath node @param: اسم السمة xmlarattrname في العقدة. param: محدد معلمات عقدة DEP ، الافتراضي هو.@return: قيمة العقدة الأولى ---------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- } functiongetxmlnodevalue (strentityenginefile: string ؛ xmlnodepath: string ؛ constxmlattrname: string = '' ؛ constdep: char = '.' // xml node path xmlnodelist: = tstringlist.create ؛ xmlnodelist.delimiter: = dep ؛ (strentityEngineFile) ؛ xmldocument.active: = true ؛ trynode: = xmldocument.documentElement ؛ if (node.nodeName = xmlnodelist [0] (node.childnodes ، xmlnodelist [i]) esersebreak ؛ end ؛ if (node = nil) therbeginResult: = '' node.textelseresult: = node.attributenodes.nodes [xmlattrname] .nodevalue ؛ end ؛ endelsebeginResult: = '' ؛ end ؛ exceptresult: = 'error' ؛ end ؛ ------------------------------------------------- ---------------------------- fun/pro: setxmlnodevalue@date: 2004.12.11@param: xmlfilexml file@param: xmlnodepath Node@Param: اسم السمة في عقدة XMLATTRNAME. param: محدد معلمات عقدة DEP ، الافتراضي هو.@return: لا توجد عملية ناجحة ----------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ----------------------------------------------- strentityEngineFile: String ؛ xmlnodepath: string ؛ constxmlattrname: string = '' ؛ constvalue: string = '' : integer ؛ start // xml node path xmlnodelist: = tstringlist.create ؛ xmlnodelist.delimiter: = dep ؛ ؛ xmldocument.loadfromfile (strentityenginefile) ؛ xmldocument.active: = true ؛ trynode: = xmldocument.documentElement ؛ if (node.nodename = xmlnodelist [0]) thennode: = getNodeFromixMlnodelist (node.childnodes ، xmlnodelist [i]) esersebreak ؛ end ؛ if (node <> nil) therbeginif (trim (xmlattrname) = '') : = value ؛ xmldocument.savetofile (strentityEngineFile) ؛ end ؛ end ؛ النتيجة: = true ؛ exceptresult: = false ؛ end ؛ xmldocument.active: = false ؛ end ؛ end ؛ولكن هناك مشكلة في وظيفتين أعلاه: لا يمكن إلا أن تجد السجل الأول باسم العقدة واسم السمة. على سبيل المثال: إذا كنت ترغب في تشغيل ملف XML مشابه لما يلي ، فهناك العديد من الأسماء وأسماء السمات مع نفس أسماء السمات ، ولكن قيم السمات مختلفة ، وستستمر وظائف القراءة والكتابة أعلاه يضرب.
<colourname = normalattributed = 100green = 125blue = 150/> <colourname = goodattributed = 150green = 175blue = 200/> <colourname = aspectatattributed = 0green = 0blue = 255/>حسنًا ، إن أعظم متعة للمبرمجين هو القيام بذلك بنفسك. دعنا نراجع هاتين وظيفتين. تتم إضافة معلمتين إلى الوظيفة الأصلية:
{------------------------------------------- --------------------------------------------- المرح/المحترف : getxmlnodespecialue@date: 2004.12.11@param: xmlfilexml file@param: param: اسم السمة في العقدة التي سيتم البحث عنها بواسطة xmlSpecialName @param: xmlspecialevalue القيمة المقابلة لسممة معينة في العقدة المراد البحث عنها عن param: Dep Node Parameter Separator ، الافتراضي هو. سمة معينة --- ------------------------------------------------ ------ ---------------------------} functiongetxmlnodespecialvalue (strentityenginefile: string ؛ xmlnodepath: string ؛ constxmlattrname: string = '' ؛ : string = '' ؛ : = tstringList.create ؛ xmlnodelist.delimiter: = dep ؛ xmlnodelist.delimitedtext: = xmlnodepath ؛ urlCount: = xmlnodelist.count نشط: = صحيح ؛ [i]) ؛ node.attributenodes.nodes [xmlspecialName] .nodevalue ؛ // لا أريد أن أعلن متغيرًا مؤقتًا هنا ، لذلك استخدم النتيجة للمقارنة ، والتي قد تكون مخاطر مخفية. بينما (النتيجة <> xmlSpecialValue)) dobeginnode: = node.nextsibling ؛ النهاية ؛ النتيجة: = node.attributenodes.nodes [xmlattrname] .nodevalue ؛ end ؛ end ؛ end ؛ endelsebeginResult: = '' ؛ end ؛ exceptresult: = 'error' ؛ end ؛كتابة وظائف
{------------------------------------------- --------------------------------------- المرح/المحترف: setxmlnodespecialvalue@التاريخ: 2004.12 .11@param: xmlfilexml file@param: xmlnodepath node@param: اسم السمة xmlarattrname في العقدة. param: اسم السمة في العقدة التي سيتم البحث عنها بواسطة xmlSpecialName @param: xmlspecialue القيمة المقابلة لخاصية في العقدة المراد البحث عنها بواسطة param: dep node parameter ، الافتراضي هو. @إرجاع: هل العملية. ناجح أم لا --- -------------------------------------------- ------ ---------------------------} functionSetxMlnodespecialValue (strentityenginefile: string ؛ xmlnodepath: string ؛ constxmlattrname: string = '' ؛ constvalue : string = '' ؛ ؛ cmpvalue: string ؛ start // xml node path xmlnodelist: = tstringList.create ؛ xmlnodelist.delimiter: = dep ؛ nil) ؛ xmldocument.loadfromfile (strentityenginefile) ؛ xmldocument.active: = true ؛ trynode: = xmldocument.documentElement ؛ if (node.nodename = xmlnodelist [0]) nil) thennode: = getNodefromixMlnodelist (node.childnodes ، xmlnodelist [i]) esersebreak ؛ end ؛ if (node <> nil) therbegin {if (trim (xmlattrname) = '') xmlattrname] .nodevalue: = value ؛} if (trim (xmlattrname) = '') nextsibling ؛ القيمة ؛ النهاية ؛ xmldocument.