PDA

View Full Version : سوال: چند سوال در مورد خواند اطلاعات از یک سند xml



beginner_1395
پنج شنبه 20 آبان 1395, 01:42 صبح
به نام خدا

من اطلاعات خودرو به شکل زیر در یک فایل دارم


<?xml version="1.0" encoding="utf-8" ?>

- <Authors>
- <Author Author="Mahesh Chand">
<Book>GDI+ Programming</Book>
<Cost>$49.95</Cost>
<Publisher>Addison-Wesley</Publisher>
</Author>


- <Author Name="Mike Gold">
<Book>Programmer's Guide to C#‎‎</Book>
<Cost>$44.95</Cost>
<Publisher>Microgold Publishing</Publisher>
</Author>


- <Author Name="Scott Lysle">
<Book>Custom Controls</Book>
<Cost>$39.95</Cost>
<Publisher>C#‎‎ Corner</Publisher>
</Author>
</Authors>

1-حالا چگونه در یک حلقه همه Author ها را بخونم
مثلا میخوام یه فهرست از همه کتابها داشته باشم چطور همه نادهای فایل رو بخونم
و اسم کتابها را در یک لیست باکس بریزم
2-چگونه کتابی را که Author ان Mahesh Chand است بدست بیارم
3-چگونه کتابی که قیمت ان $39.95 است را بدست بیارم

ببینید دوستان من بخش دلفی را جستجو کردم اما پاسخ سوالات رو پیدا نکردم
یک کلاس دیدم که برای کار با اکس ام ال بود اما جواب سوالاتم را شامل نمیشد
با جستجو تونستم نوشتن این فایل رو یاد بگیرم
اما در خوندن اطلاعات خیلی مشکل دارم لطفا راهنمایی بفرمایید

Mask
پنج شنبه 20 آبان 1395, 22:59 عصر
دیتا رو در یک کلاینت دیتا ست لود کنید و مثه بانک اطلاعاتی باهاش برخورد کنید.

Mahmood_M
جمعه 21 آبان 1395, 12:36 عصر
به صورت زیر می تونید اطلاعات موردنطر رو بدست بیارید :

var
XMLDoc : IXMLDocument;
Authors, Author, Book, Cost, CurrentNode : IXMLNode;
AuthorName, BookName : String;
I : Integer;
begin
XMLDoc := LoadXMLDocument('MyXMLFileAddress');
Authors := XMLDoc.DocumentElement;
for I := 0 to Authors.ChildNodes.Count - 1 do
begin
CurrentNode := Authors.ChildNodes[I];
if CurrentNode.NodeName = 'Author' then
begin
Author := CurrentNode;
AuthorName := Author.Attributes['Name'];

if AuthorName = 'Mahesh Chand' then
begin
Book := Author.ChildNodes.FindNode('Book');
BookName := Book.Text;

ShowMessage('Book Writen By Mahesh Chand : ' + BookName);
end;

Cost := Author.ChildNodes.FindNode('Cost');
if Cost.Text = '$39.95' then
begin
Book := Author.ChildNodes.FindNode('Book');
BookName := Book.Text;

ShowMessage('$39.95 Book : ' + BookName);
end;
end;
end;
end;
یونیتهای زیر رو به بخش Uses اضافه کنید :

XML.XMLDoc, XML.XMLIntf
ابتدا فایل لود میشه، اولین Node که بقیه زیر مجموعه اون هستند انتخاب میشه، یک حلقه به تعداد Node های Child اجرا میشه، اگر Node مربوط بخ Author بود Child هاش رو بررسی می کنیم
اگر باز ابهامی هست بپرسید