PDA

View Full Version : حرفه ای: پیدا کردن یک تگ خاص در XML



ebrahim.rayatparvar
جمعه 13 بهمن 1396, 12:45 عصر
سلام دوستان من یه فایل xml دارم که داخلش کلی تگ وجود داره حالا میخوام بر اساس صفت خاصی دنبال های تگ های خودم بگیردم. تو نت هر چی سرچ زدم چیز خاصی ندادم همه جا باید اسم صفت رو بدونی ولی من میخوام تگ ها رو دونه دونه چک کنم داخلش صفتی با اسم x وجود داره بعد مقدارش صفت رو تغییر بدم.


با کد زیر میشه کلیه تگهای یه فایل xml رو تو لیست باکس لیست کرد.





XmlTextReader xmlReader = new XmlTextReader("1.xml");
while (xmlReader.Read())
{
switch (xmlReader.NodeType)
{
case XmlNodeType.Element:
listBox1.Items.Add("<" + xmlReader.Name + ">");

break;
case XmlNodeType.Text:
listBox1.Items.Add(xmlReader.Value);
break;
}
}

Mahmoud.Afrad
جمعه 13 بهمن 1396, 12:51 عصر
یک نمونه از xml قرار بدید و بگید دنبال چه داده ای هستید.

ebrahim.rayatparvar
جمعه 13 بهمن 1396, 13:16 عصر
<?xml version="1.0"?>
<tag1>
<tag2 />
<tag3>
<tag4 ali="1" reza="2">
<tagtest Name="qqq1" />
<tagtest Name="wwww" />
<tagtest Name="eeee" />
<tagtest Name="rrrr" />
</tag4>
<tag5 ali="1" ahmad="3">
<tagtest Name="qqq1" />
<tagtest Name="wwww" />
<tagtest Name="eeee" />
<tagtest Name="rrrr" />
</tag5>
<tag6 ali="1">
<tagtest Name="qqq1" />
<tagtest Name="wwww" />
<tagtest Name="eeee" />
<tagtest Name="rrrr" />

</tag6>
</tag3>
</tag1>


سلام مهندس نمونه رو ببینید من دنبال تگ هایی هستم که صفت اون ali هست و بعدش مقدارش رو تغییر بدم.

Mahmoud.Afrad
جمعه 13 بهمن 1396, 15:16 عصر
//using System.Data.Linq;

using (StreamReader stream = new StreamReader("XmlFilePath" , Encoding.UTF8))
{
XElement xml = XElement.Load(stream);
IEnumerable<XElement> nodeList =
from element in xml.Descendants()
where element.Attributes().Any(attr=> attr.Name == "ali")
select element;
// ...
}

ebrahim.rayatparvar
شنبه 14 بهمن 1396, 08:05 صبح
سلام مهندس عالی بود. خوب کار کرد فقط یه نکته ای هست الان من صفتهای ali رو پییدا کردم چون از streamreader استفاده کردیم نمیتونم مقدار value این صفت ها رو تغییر بدم.

Mahmoud.Afrad
شنبه 14 بهمن 1396, 11:48 صبح
nodeList را قبل از بلاک using تعریف و داخل بلاک مقداردهی کنید.
بعد از بلاک مربوط به StreamReader تغییرات لازم را روی xml اعمال کرده، یک StreamWriter بسازید و از متد Save از شئ xml استفاده کنید.

ebrahim.rayatparvar
شنبه 14 بهمن 1396, 19:31 عصر
دمت گرم عالی بود. با XmlDocument تو خود بلاک streamreder حلش کردم.