PDA

View Full Version : سوال: سوالاتی در مورد XML



بیتا حکمت
پنج شنبه 16 بهمن 1393, 19:29 عصر
سلاما" علیکم :لبخند: ، فرض کنید یک فایل XML داریم به این صورت هستش


<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<row>
<field name="">1</field>
<field name="chapter">الجزء الأول</field>
<field name="pageno">1</field>
<field name="soraano">1</field>
<field name="ayaano">1</field>
<field name="soraaname">الفاتحة</field>
<field name="ayaa">بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ</field>
</row>
<row>
<field name="id">2</field>
<field name="chapter">الجزء الأول</field>
<field name="pageno">1</field>
<field name="soraano">1</field>
<field name="ayaano">2</field>
<field name="soraaname">الفاتحة</field>
<field name="ayaa">الْحَمْدُ للّهِ رَبِّ الْعَالَمِينَ</field>
</row>
<ROOT>




اول اینکه : چطوری میشه این XML رو به یک فایل MDF یا فایلی که تو sql server باز بشه تبدیل کرد

دوم اینکه : الان تو مثال بالا NOD کدومه ؟ ROOT یا ROW ؟

سوم اینکه : میخوایم بگیم اگه تو سطری ayaano=1 بود ، فیلد soraaname رو نشون بده ، باید چی کار کنیم ؟

چهارم اینکه : یک XML معمولی چه تفاوتی با XML ، فایل های RRS داره یا اصلا" فرقی نداره

پیشاپیش از توجه و راهنمایی اتون ممنونم .

plus
پنج شنبه 16 بهمن 1393, 23:55 عصر
1. به روش های مختلف. یکی از اونها، پیمایش داده ها با کلاس XMLDocument یا XMLReader، انتقال اونها به یک DataTable و یا درج مستقیم تک تک رکوردهاست.
2. هر XML Document از عنواع مختلفی از Node ها تشکیل شده.Document شما بیشتر از 50 تا Node داره که اولین اون ROOT که یک element هست شروع میشه. تعاریف اولیه XML و DOM رو مطالعه کنید.
3. با استفاده از کلاس XMLDocument و دونستن کمی XPath میتونید. الان امکان ارسال کد ندارم.
4. خروجی RSS یک XML Document هست که استانداردی برای المان ها داره. در واقع XML نوع کلی تر هست.

بیتا حکمت
جمعه 17 بهمن 1393, 00:22 صبح
1. به روش های مختلف. یکی از اونها، پیمایش داده ها با کلاس XMLDocument یا XMLReader، انتقال اونها به یک DataTable و یا درج مستقیم تک تک رکوردهاست.
2. هر XML Document از عنواع مختلفی از Node ها تشکیل شده.Document شما بیشتر از 50 تا Node داره که اولین اون ROOT که یک element هست شروع میشه. تعاریف اولیه XML و DOM رو مطالعه کنید.
3. با استفاده از کلاس XMLDocument و دونستن کمی XPath میتونید. الان امکان ارسال کد ندارم.
4. خروجی RSS یک XML Document هست که استانداردی برای المان ها داره. در واقع XML نوع کلی تر هست.

ممنونم . فعلا" من کار رو با روشی غیر اصولی حل کردم . هر فیلد رو داخل لیست ریختم ، در اخر هم Arraylist ها رو وارد دیتابیس کردم . اما اگر ممکنه هر زمان که امکانش براتون بود
نمونه کد قرار بدین . تا روش اصولی تر رو یاد بگیرم .

اینم متوجه نشدم از کجا گفتین داکینومنت من 50 تا NOD داره .50 از کجا اومد؟

plus
جمعه 17 بهمن 1393, 22:53 عصر
ممنونم . فعلا" من کار رو با روشی غیر اصولی حل کردم . هر فیلد رو داخل لیست ریختم ، در اخر هم Arraylist ها رو وارد دیتابیس کردم . اما اگر ممکنه هر زمان که امکانش براتون بود
نمونه کد قرار بدین . تا روش اصولی تر رو یاد بگیرم .

اینم متوجه نشدم از کجا گفتین داکینومنت من 50 تا NOD داره .50 از کجا اومد؟

برای مثال این کد، نام فامیل شخصی که اسمش Ali هست رو پیدا میکنه:

string sXML = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<ROOT>
<row>
<field title=""name"">Ali</field>
<field title=""family"">Rezai</field>
</row>
<row>
<field title=""name"">Mahmoud</field>
<field title=""family"">Karimi</field>
</row>
</ROOT>";
XmlDocument xmlDocument = new XmlDocument();
using (StringReader sr = new StringReader(sXML)) {
xmlDocument.Load(sr);
}
XmlNodeList nodes = xmlDocument.SelectNodes("ROOT/row/field[@title='name']");
foreach (XmlNode node in nodes) {
if (node.InnerText.Equals("Ali")) {
XmlNode sibling = node.ParentNode.SelectSingleNode("field[@title='family']");
if (sibling != null) {
Console.WriteLine("Ali's family is {0}", sibling.InnerText);
}
}
}

البته همونطور که گفتم این تنها روش نیست. برای مثال میشد از XmlReader و یا XmlSerialization هم استفاده کرد. بهترین روش بر اساس اینکه صورت مساله به صورت کامل چی هست مشخص میشه.
در مورد تعداد Node ها هم، همونطور که گفتم در مورد Xml و DOM مطالعه کنید. اول یک Node که از نوع Element هست به نام ROOT دارین. بعد یک Node از نوع Whitespace، بعد یک Node از نوع Element با نام Field، بعد یک Node از نوع Attribute با نام name و ... . احتمالا شما Element رو با Node اشتباه گرفتین. Element تنها یک نوع از Node هست. سایر نوع های Node:

// Summary:
// This is returned by the System.Xml.XmlReader if a Read method has not been
// called.
None = 0,
//
// Summary:
// An element (for example, <item> ).
Element = 1,
//
// Summary:
// An attribute (for example, id='123' ).
Attribute = 2,
//
// Summary:
// The text content of a node.
Text = 3,
//
// Summary:
// A CDATA section (for example, <![CDATA[my escaped text]]> ).
CDATA = 4,
//
// Summary:
// A reference to an entity (for example, &num; ).
EntityReference = 5,
//
// Summary:
// An entity declaration (for example, <!ENTITY...> ).
Entity = 6,
//
// Summary:
// A processing instruction (for example, <?pi test?> ).
ProcessingInstruction = 7,
//
// Summary:
// A comment (for example, <!-- my comment --> ).
Comment = 8,
//
// Summary:
// A document object that, as the root of the document tree, provides access
// to the entire XML document.
Document = 9,
//
// Summary:
// The document type declaration, indicated by the following tag (for example,
// <!DOCTYPE...> ).
DocumentType = 10,
//
// Summary:
// A document fragment.
DocumentFragment = 11,
//
// Summary:
// A notation in the document type declaration (for example, <!NOTATION...>
// ).
Notation = 12,
//
// Summary:
// White space between markup.
Whitespace = 13,
//
// Summary:
// White space between markup in a mixed content model or white space within
// the xml:space="preserve" scope.
SignificantWhitespace = 14,
//
// Summary:
// An end element tag (for example, </item> ).
EndElement = 15,
//
// Summary:
// Returned when XmlReader gets to the end of the entity replacement as a result
// of a call to System.Xml.XmlReader.ResolveEntity().
EndEntity = 16,
//
// Summary:
// The XML declaration (for example, <?xml version='1.0'?> ).
XmlDeclaration = 17,

SabaSabouhi
شنبه 18 بهمن 1393, 09:45 صبح
سلام
هر تگ رو یک نود بدونید. یک نود می‌تونه ساده باشه یا بچه داشته باشه.


var text = File.ReadAllText( xmlPath );
var xDocument = XDocument.Parse( text );
var xRoot = xDocument.Root;

به این شکل می‌تونی xml رو باز کنی، و با مراجعه به بچه‌های xRoot تمام رکوردها رو مرور کنی.
جنس هر نود XElement هست، چه ROOT و چه row یا field.
و معمولاً نام tagها رو با حروف کوچیک می‌نویسن.

برای ایجاد دیتابیس که باید از فرمان‌های DDL مثل Create database myDb استفاده کنی
و برای ساخت جدول هم از Create Table
و برای پر کردن جدول‌ها هم می‌تونه خط به خط از xml بخونی و تو جدول پر کنی.
اگر ابزاری هم برای این کار وجود داشته باشه همین کار رو می‌کنه.

صبا صبوحی