نمایش محتویات گره های XML بصورت تصادفی

#C

توسط thearrow در 5 سال پیش
0 605 2 5 سال پیش
thearrowreza-irdev
0

سلام سی شارپ چند سوال دارم راجع به XML و خواندن اون توسط برنامه : فرض کنید یک فایل setting.xml داریم و این گره ها در فایل وجود دارند :

<?xml version="1.0"?>

<setting>

<pm>
<question></question>
<answer>
		<random>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</random>
</answer>
</pm>

<pm>
<question></question>
<answer></answer>
</pm>

<pm>
<question></question>
<answer></answer>
</pm>

</setting>

اول چطوری این رو توی برنامه Load کنم دوم اینکه چطوری باید به برنامه فهموند که هر سوال و جواب بینه <pm></pm> قرار داره و هر سوال با <question> شروع و با </question> تمام میشه و جواب ها هم به همین صورت. در واقع با استفاده از </pm> سوال و جواب ها جدا بشند و اگه پاسخ سوالات ار این دستور در اونها استفاده شده بود :

<random>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</random>

هر li یک پاسخ به حساب بیاد و حتی کاربر بتونه به پاسخ ها اضافه کنه

، و این خاصیت که کاربر هم بتونه گره ها رو اضافه کنه ( یعنی اینکه بتونه <pm><question></question><answer></answer></pm> و حتی random هم اضافه کنه

و حساسیت به کوچک و بزرگ بودن هم نداشته باشه


روی فرم یک TextBox1 و یک Btn و یک LBL وجود داره مثلا الان فکر کنید که فایل XML ما این محتویات رو داره

<?xml version="1.0"?>

<setting>

<pm>
<question>hi</question>
<answer>
		<random>
			<li>hi</li>
			<li>hello</li>
			<li>salam</li>
			<li>slm</li>
			<li>hi there</li>
		</random>
</answer>
</pm>

<pm>
<question>سلام</question>
<answer>سلام خوبی؟</answer>
</pm>
</setting>

حالا اگه کاربر توی تکست باکس بنویسه hi و هر بار روی BTN بزنه ، به صورت Random یکی رو انتخاب و توی Lbl نشون بده یا مثلا وقتی بگه سلام مثله اون جواب بده

اگه مجانی نمیشه لطفا بگید چقدر هزینه داره که کمکم کنید؟ ممنون

0

سلام برای اینکه یکم بهتر بشه ساختار فایل XML رو اینطوری میکنیم:

<Main>
    <QA>
        <question>What is your favorite color?</question>
        <answer>Blue</answer>
        <answer>Red</answer>
        <answer>Green</answer>
        <answer>Yellow</answer>
    </QA>
	
    <QA>
        <question>What is your favorite programming language?</question>
        <answer>C#</answer>
        <answer>Java</answer>
        <answer>Pascal</answer>
        <answer>C++</answer>
        <answer>Delphi</answer>
        <answer>VB.Net</answer>
    </QA>
</Main>

نیازی نیست نود اضافی بذاریم اگه نود یکی بود همیشه جواب یکیه از بیشتر بود یکیش بصورت تصادفی انتخاب میشه.

[CSHARP]using System.Linq; using System.Xml.Linq;[/CSHARP]

[CSHARP] XmlDocument xml = new XmlDocument(); xml.Load("QA.xml");

        XmlNodeList xList = xml.SelectNodes("Main/QA");
        foreach (XmlNode xn in xList)
        {
            string Question = xn["question"].InnerText;
            if (Question == txtQ.Text)
            {
                XmlNodeList answerlist = xn.SelectNodes("./answer");
                foreach (XmlNode ans in answerlist
                    .Cast<XmlNode>()
                    .OrderBy(elem =>Guid.NewGuid()))
                {
                    txtA.Text = ans.InnerText;
                }
            }
        }[/CSHARP]
0

ممنون واقعا ممنون

فقط اگه میشه پروژه به صورتی که گفتم بگذاربد ( یعنی حالا اگه کاربر توی تکست باکس بنویسه hi و هر بار روی BTN بزنه ، به صورت Random یکی رو انتخاب و توی Lbl نشون بده )

آخرین ویرایش: 25-04-2013 ساعت 22:12، توسط The Arrow

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید