PDA

View Full Version : مشکل با با xml (Linq to Xml)



NIMA_1981
دوشنبه 13 خرداد 1392, 19:13 عصر
سلام دوستان من یک فایل xml دارم به این شکل

<?xml version="1.0" encoding="utf-8"?>
<library>
<book index="1" name="C++‎‎‎">
<page index="1" text="page1" />
<page index="2" text="page2" />
<page index="3" text="page3" />
<page index="4" text="page4" />
<page index="5" text="page5" />
<page index="6" text="page6" />
</book>
<book index="2" name="php">
<page index="1" text="page1" />
<page index="2" text="page2" />
<page index="3" text="page3" />
<page index="4" text="page4" />
</book>
</library>


حالا میخوام اطلاعات هر کدام را بصورت جدا گانه داشته باشم یعنی اگر کتاب با index 1 را جستجو میکنیم بقیه اطلاعات را به من نشان بدهد
من کد را اینجوری نوشتم

string fileName = "t1.xml";
XDocument doc = XDocument.Load(fileName);
var query = from m in doc.Descendants("book") where (string)m.Attribute("index") == "1" select m;
foreach (var el in query)
{
textBox1.Text += el+ Environment.NewLine;
}


اما اطلاعات را به این شکل نشون میده
105091
من میخوام دیگه اطلاعات اضافی رو نشون نده مثلا فقط مقدار text هر صفحه را نشون بده

ممنون میشم اگه راهنمایی کنید

tooraj_azizi_1035
دوشنبه 13 خرداد 1392, 19:48 عصر
select تون رو اینطوری بنویسید:
select m.Attribute("text").Value

Mahmoud.Afrad
دوشنبه 13 خرداد 1392, 20:04 عصر
المنت های مورد نظر رو بگیرید و بعد خصوصیاتش رو بخونید:

var query = (from m in doc.Descendants("book")
where (string)m.Attribute("index") == "1"
select m).Elements("page");

foreach (var el in query)
{
listBox1.Items.Add(el.Attribute("index").Value +":" + el.Attribute("text").Value);
//textBox1.Text += el + Environment.NewLine;
}

NIMA_1981
چهارشنبه 15 خرداد 1392, 14:47 عصر
select تون رو اینطوری بنویسید:
select m.Attribute("text").Value
ممنون از شما اما با تغییراتی که شما فرمودید درست نشد.

NIMA_1981
چهارشنبه 15 خرداد 1392, 14:49 عصر
المنت های مورد نظر رو بگیرید و بعد خصوصیاتش رو بخونید:

var query = (from m in doc.Descendants("book")
where (string)m.Attribute("index") == "1"
select m).Elements("page");

foreach (var el in query)
{
listBox1.Items.Add(el.Attribute("index").Value +":" + el.Attribute("text").Value);
//textBox1.Text += el + Environment.NewLine;
}


ممنون روش شما جواب داد

حالا یک سوال دیگه داشتم جطوری میتونم همزمان که id رو پیدا کرد بگم ار page 3 تا page5 اون کتاب رو نشون بده منون میشم اینم راهنمایی کنید

Mahmoud.Afrad
چهارشنبه 15 خرداد 1392, 20:02 عصر
باید با رشته کار کنی.

foreach (var el in query)
{
string id = el.Attribute("index").Value;
string text = el.Attribute("text").Value;
int pageNumber = int.Parse(text.Substring(4));
if (pageNumber >= 3 && pageNumber <= 5)
{
listBox1.Items.Add(id + ":" + text);
}
}