ABA


"צריך עזרה בקריאת קובץ XML בC#"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14850 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14850
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   23:03   17.07.08   
אל הפורום  
  צריך עזרה בקריאת קובץ XML בC#  
 
   ערכתי לאחרונה בתאריך 17.07.08 בשעה 23:07 בברכה, ronen333
 
WELL, ניסתי לקרוא קובץ XML ולא בדיוק עובד לי..
כאן נמצא כל הקבצים למקרה שהקובץ CS בלבד לא מספיק כדי להבין-

אבל אני אסביר בקצרה:
קיבלתי מחרוזת דרך בקשת QUESYSTRING וניסתי להדפיס רק את הטאגים שהATTRIBUTE של הGuestNum ומתחתיו שווים לאותו מחרוזת שקיבלתי (כלומר המחרוזת שקיבלתי היא 01 אז זה ידפיס את כל הטאג' GuestNum עם התכונה NUM=01 וילדיו).


קובץ XML


<?xml version="1.0" encoding="utf-8" ?>
<GuestBook>
<GuestNum num="01">
<name>Aviad</name>
<phone type="home">09-7604902</phone>
<MSN>[email protected]</MSN>
<disc>.NET PROGRAMER</disc>
</GuestNum>
<GuestNum num="02">
<name>Izik</name>
<phone type="home">09-7489015</phone>
<MSN>[email protected]</MSN>
<disc>.net programer</disc>
</GuestNum>

</GuestBook>

קובץ CS


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Xml;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class time : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Expires = -1;
string s = Request.QueryString["suggest"];
bool flag = false;
XmlTextReader xtr = new XmlTextReader(Request.PhysicalApplicationPath+"XMLFile.xml");
string FullStr = "";
while (xtr.Read())
{
if (xtr.IsStartElement("GuestNum") == true && s == xtr.GetAttribute("num"))
{
flag = true;
FullStr += xtr.GetAttribute("num")+"<br/>";
}
else
{
flag = false;
}

if (flag==true && xtr.IsStartElement("name"))
{
FullStr += "name:" + xtr.Value+"<br/>";
}
if (flag == true && xtr.IsStartElement("phone"))
{
FullStr += xtr.GetAttribute("type") + ":" + xtr.Value + "<br/>";

}
if (flag == true && xtr.IsStartElement("MSN"))
{
FullStr += xtr.Value + "<br/>";
}
if (flag == true && xtr.IsStartElement("disc"))
{
FullStr += xtr.Value + "<br/>";
}

}


if(s!="")
Response.Write(FullStr);
Response.End();

}
}

תודה רבה רבה מראש לעוזרים
בבקשה לא לנעול מכיוון שמדובר פה על בעיה שכורכה בקריאת הקובץ XML ולא בתיכנות WEB.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אם יש לך QueryString למה לעבור על כל האלמנטים? :) Nesher  18.07.08 11:25 1
     אחח XPath זה כזה אלוהי akoka 18.07.08 11:32 2
     אני לא חיפשתי דרך לעשות את זה יותר יעיל ronen333  18.07.08 14:55 3
         בוא נשאל שאלה כזאת... מה הפלט שאתה מצפה Nesher  18.07.08 19:31 4
             פלט שרציתי לקבל: ronen333  19.07.08 11:13 5
                 כי אחרי שעשית קריאה ראשונה Nesher  19.07.08 13:00 6
                     אווקי אחי אבל אני כן צריך לשאול ronen333  19.07.08 13:08 7
                         אתה צריך לעשות עוד xtr.Read() לפני כל if Nesher  19.07.08 16:31 8
                             לא עבוד אחי X= ronen333  19.07.08 18:20 9
                                 אני מאמין שתוכל להסתדר עם המדריך של ה-MSDN Nesher  19.07.08 19:45 10
                                     אף פעם לא ממש הצלחתי להסתדר עם MSDN ronen333  19.07.08 23:14 11
                                         השני יש בו קצת דברים שיכולים לעזור Nesher  20.07.08 01:59 12
                                             סבבה אני אחכה P= ronen333  20.07.08 11:51 14
                                             עדיין מחכה אחי P= ronen333  22.07.08 09:57 15
                                                 היו לי בעיות עם האינטרנט חח Nesher  23.07.08 17:12 16
                                                     תודה אחי ronen333  25.07.08 15:12 18
  הצלחתי לפתור לבנתיים בדרך הערבית שלי P= ronen333  20.07.08 11:51 13
  חח הסתבכת אש עם כול הקטע של הXML אה? akoka 24.07.08 15:24 17

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   11:25   18.07.08   
אל הפורום  
  1. אם יש לך QueryString למה לעבור על כל האלמנטים? :)  
בתגובה להודעה מספר 0
 

private static XPathNavigator GetNavigator(string query )
{
try
{
XmlDocument xmlDox = new XmlDocument();
xmlDocument.Load(pathHere);
XPathNavigator nav = xmlDoc.CreateNavigator();
// Doing the select on the config file to get the location of the query
XPathNodeIterator iterator = nav.Select(query);

// Starting the interator by calling for the first time to MoveNext
bool doesPathExistsInXmlFile = iterator.MoveNext();

// Checking if the query exists in config file.
if (doesPathExistsInXmlFile )
{
// returning the navigator
return (iterator.Current);
}
else
{
return null;
}
}
catch (Exception ex)
{
throw (ex);
}
}


לגבי מה ה-QueryString והמבנה שלו, תנסה לחפש קצת מידע באתר של w3c.org
או ב-MSDN
זה ממש פשוט...
אצלך זה אמור להיות משהו בסגנון של
//GuestBook//GuestNum//num="01"

יש עוד שיטות למציאה יותר טובה של הנתונים ממה שעשית אני חושב..
תמיד טוב להסתכל באינטרנט
בהצלחה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   11:32   18.07.08   
אל הפורום  
  2. אחח XPath זה כזה אלוהי  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   14:55   18.07.08   
אל הפורום  
  3. אני לא חיפשתי דרך לעשות את זה יותר יעיל  
בתגובה להודעה מספר 1
 
   לא עשיתי את זה כדי ליישם את זה באתר או משהו.. אני עושה את זה כדי לדעת איך לקרוא קבצי XML ולעבוד עם AJAX, וזה היה הדוגמה הכי מהירה שיכלתי לחשוב עליה שזה שילוב של שניהם P=.

אני רוצה פשוט לדעת מה לא טוב בצורת קריאה שלי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   19:31   18.07.08   
אל הפורום  
  4. בוא נשאל שאלה כזאת... מה הפלט שאתה מצפה  
בתגובה להודעה מספר 3
 
ומה אתה מקבל בפועל?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   11:13   19.07.08   
אל הפורום  
  5. פלט שרציתי לקבל:  
בתגובה להודעה מספר 4
 
   אם נשלח 01 בQUERYSTRING אז רציתי שזה ידפיס:

01
name:Aviad
home:09-7604902
[email protected]
.NET PROGRAMER

במקום זה זה מדפיס

01


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   13:00   19.07.08   
אל הפורום  
  6. כי אחרי שעשית קריאה ראשונה  
בתגובה להודעה מספר 5
 
אתה לא ממשיך בקריאות ככה שהבדיקות אחרי ה-if-else בתוך לולאת ה-while
הן כביכול מיותרות..
כלומר אחרי שבדקת שזה באמת המס' שחיפשת אתה צריך לעשות קריאות פנימיות בתוך הלולאה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   13:08   19.07.08   
אל הפורום  
  7. אווקי אחי אבל אני כן צריך לשאול  
בתגובה להודעה מספר 6
 
   ערכתי לאחרונה בתאריך 19.07.08 בשעה 13:08 בברכה, ronen333
 
אם הוא הגיע לתגיד הNAME ואז לשרשר את הVALUE שלו נכון?

תוכל להראות לי למה אתה מתכוון?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   16:31   19.07.08   
אל הפורום  
  8. אתה צריך לעשות עוד xtr.Read() לפני כל if  
בתגובה להודעה מספר 7
 
כי הסמן לאותו קורא טקסטים נשאר על אותו אלמנט


// עובר לקריאה הבאה
flag = flag & xtr.Read();
if (flag==true && xtr.IsStartElement("name"))
{
FullStr += "name:" + xtr.Value+"<br/>";
}

flag = flag & xtr.Read();
if (flag == true && xtr.IsStartElement("phone"))
{
FullStr += xtr.GetAttribute("type") + ":" + xtr.Value + "<br/>";
}

flag = flag & xtr.Read();
if (flag == true && xtr.IsStartElement("MSN"))
{
FullStr += xtr.Value + "<br/>";
}

flag = flag & xtr.Read();
if (flag == true && xtr.IsStartElement("disc"))
{
FullStr += xtr.Value + "<br/>";
}

אני כמובן בהנחה ש-Read יודע להכנס גם לאלמנטים של הילד
אם לא, אתה יכול איכשהו לעשות איתו איזשהו XPathNavigator לאותו אלמנט
ברגע שה-flag שלך הוא אמת
ואז להכנס לילדים שלו "ידנית"


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   18:20   19.07.08   
אל הפורום  
  9. לא עבוד אחי X=  
בתגובה להודעה מספר 8
 
   ערכתי לאחרונה בתאריך 19.07.08 בשעה 18:20 בברכה, ronen333
 
בדקתי עכשיו לא מדפיס כלום X=.
וגם לא הבנתי למה לעשות IF כזה לכל אלמנט, הרי בשביל זה הWHILE כאשר שאלה כזה לא יתקיים הוא פשוט יצא מהWHILE.

אחי למדתי את זה משיעור של איזה 10 נקדות מLYNDA.. יש לך איזה אתר טוב ללימוד איך עובדים עם XML ו.NET למה המדריך מLYNDA ממש על הפנים?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   19:45   19.07.08   
אל הפורום  
  10. אני מאמין שתוכל להסתדר עם המדריך של ה-MSDN  
בתגובה להודעה מספר 9
 
לעבודה עם XMLים בדוט נט
אם לא תחפש ב-code project שזה אתר מעולה לדברים האלה...
לדעתי תנסה לעבוד עם XmlDocument ו-XPathNavigator שהם ממש ממש קלים לעבודה
מדבר מהמון ניסיון עבודה עם המחלקות הללו


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   23:14   19.07.08   
אל הפורום  
  11. אף פעם לא ממש הצלחתי להסתדר עם MSDN  
בתגובה להודעה מספר 10
 
   ערכתי לאחרונה בתאריך 19.07.08 בשעה 23:19 בברכה, ronen333
 
לא יודע למה XD.. אולי אני צריך להתחיל להתרגל.

ואשמח לקבל לינקים אחי, תודה רבה

עריכה:
אלה טובים?
http://www.codeproject.com/KB/XML/csharpcodedocumentation.aspx
http://www.codeproject.com/KB/cs/xmldirectorylister.aspx

אם לא כל כך אז אשמח לקבל לינקים, אני רוצה ללמוד את זה בצורה הטובה ביותר =]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   01:59   20.07.08   
אל הפורום  
  12. השני יש בו קצת דברים שיכולים לעזור  
בתגובה להודעה מספר 11
 
אבל זה יותר בקטע של בניית XML עם קוד...
הראשון לא קשור כל כך.. אני אחפש לך מחר כשיהיה לי זמן..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   11:51   20.07.08   
אל הפורום  
  14. סבבה אני אחכה P=  
בתגובה להודעה מספר 12
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   09:57   22.07.08   
אל הפורום  
  15. עדיין מחכה אחי P=  
בתגובה להודעה מספר 12
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק, 43 נקודות
   17:12   23.07.08   
אל הפורום  
  16. היו לי בעיות עם האינטרנט חח  
בתגובה להודעה מספר 15
 
ערכתי לאחרונה בתאריך 23.07.08 בשעה 18:38 בברכה, Nesher
 
:|

בקשר לבקשתך.. הסתכלתי קצת בגוגל
אין משהו שהוא ממש ממש שווה
רק זה שמסביר קצת על הקוד שהבאתי לך
http://www.codeproject.com/KB/cpp/myXPath.aspx
ומשם הוא מפנה לזה
שנראה לי יכול להיות הכי יעיל
http://msdn.microsoft.com/en-us/library/ms998559.aspx

והרעיון הכי טוב, תחפש ספרים של #C שנחשבים טובים (יש גם את האשכול ש-Net_Boy הרים)
ופשוט תלמד מספר נורמלי כי אין באינטרנט משהו שהוא ממש ממש טוב


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   15:12   25.07.08   
אל הפורום  
  18. תודה אחי  
בתגובה להודעה מספר 16
 
   אני אציץ על זה עוד מעט בדיוק חזרתי מכפר קוקה קולה P=


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   11:51   20.07.08   
אל הפורום  
  13. הצלחתי לפתור לבנתיים בדרך הערבית שלי P=  
בתגובה להודעה מספר 0
 
   הבעיה היא שזה מגיע לטאג' אחר אז הFLAG=FALSE אז שינתי את זה לככה:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Xml;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class time : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Expires = -1;
string s = Request.QueryString;
bool flag = false;
XmlTextReader xtr = new XmlTextReader(Request.PhysicalApplicationPath+"XMLFile.xml");
string FullStr = "";
while (xtr.Read())
{
if (xtr.IsStartElement("GuestNum") == true && s == xtr.GetAttribute("num"))
{
flag = true;
FullStr += xtr.GetAttribute("num")+"<br/>";
}

if (flag==true && xtr.IsStartElement("name"))
{
FullStr += "name:" + xtr.ReadInnerXml()+"<br/>";
}
if (flag == true && xtr.IsStartElement("phone"))
{
FullStr += xtr.GetAttribute("type") + ":" + xtr.ReadInnerXml() + "<br/>";

}
if (flag == true && xtr.IsStartElement("MSN"))
{
FullStr += xtr.ReadInnerXml() + "<br/>";
}
if (flag == true && xtr.IsStartElement("disc"))
{
FullStr += xtr.ReadInnerXml() + "<br/>";
}


if (xtr.Name == "GuestNum" && xtr.NodeType == XmlNodeType.EndElement)
{
flag = false;
}
}


if(s!="")
Response.Write(FullStr);
Response.End();

}
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   15:24   24.07.08   
אל הפורום  
  17. חח הסתבכת אש עם כול הקטע של הXML אה?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net