XML ב FormView

XML ב FormView

יש לי קובץ xml פשוט שנראה כך:
<?xml version="1.0" encoding="utf-8"?> <language> <homePage>Homepage</homePage> <signUpElement>Sign up</signUpElement> </language>​
אני מעוניין להציג ולערך בformview את המידע שנמצא בין התגיות קרי (Homepage ו Sign up) אני יוצר xmlobject וכאשר אני מנסה לקשר אותו לformview הוא מבקש ממני קובץ xsl אין לי קובץ כזה , אני יכול להשתמש בסכמה, אבל אני לא רואה את האפשרות לעשות זאת. מהי הדרך הפשוטה ביותר להציג בפקד FormView את הxml הנ"ל?
 

Justin Angel

New member
קה פרובלמה מואי צ'יקיטה?

נגעת בנושא מאוד מעניין שהוא המשך ישיר של הפוסט הזה: Question from .Net Tapuz Forum: Using the ASP.Net Menu WebControl with XmlDataSource כלומר, הגענו עכשיו למצב שאנחנו יודעים שאפשר להכניס ביטוי XPath לתוך XmlDataSource, אבל אנחנו בבעיה נוספת עכשיו איך אני יכול להשתמש בו בפקדים עם Templateים? אז בוא נביט על המצב מנקודת המבט הזה - מה מחזיר ה-XmlDataSource שלנו שאנחנו עושים Bind? כנראה איזה אלמנט בסגנון XmlNode. שזה אלמנט שיחסית קשה סתם להתחיל לנווט בתוכו להחזיר ערכים (תיכנס לילד הזה, תוציא ממנו את הטקסט הזה וכך הלאה). אבל רגע, אמרנו שיש לנו Xml, ומה עושים שרוצים להוציא ערך כלשהו מ-Xml? התשובה הברורה היא - XPath. אז בוא נסכם איפה אנחנו עומדים: - יש לנו XmlDataSource שעליו יש לנו ביטוי XPath שדואג שנקבל רק XmlNode רלוונטים. - אנחנו רוצים בתוך איזה Template להמשיך להוציא ערכים באמצעות ביטויי XPath מתוך אותו אלמנט דמוי XmlNode. למזלנו, יש אפשרות Binding מאוד לא מוכרת - XPath. בדומה ל-Eval או ל-Bind, קיימת מתודת XPath שאפשר לעבוד עימה. אז בואו נראה דוגמה. נגיד ויש לנו את ה-Xml הסטדנרטי של w3schools של חנות ספרים:
<?xml version="1.0" encoding="utf-8" ?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>​
נמשיך ונגיד שאנחנו רוצים להציג ב-FormView/DetailsView את השם של ספר, המחיר שלו וגם את השפה בו הוא כתוב. אז דבר ראשון ניצור XmlDataSource שמפנה לקובץ הזה ונחבר אליו FormView/DetailsView:
<asp:FormView ID="FormView1" runat="server" DataSourceID="XmlDataSource1"> </asp:FormView> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/XMLFile.xml"> </asp:XmlDataSource>​
עכשיו נגיד - את מקור המידע שלי אני רוצה שבמקום להחזיר לי את אלמנט ה-<bookstore> היחיד אנחנו רוצים שתחזיר מספר XmlNode וספיציפת אחד לכל אלמנט <book>. אז נקבע ביטוי XPath על ה-XmlDataSource.
<asp:FormView ID="FormView1" runat="server" DataSourceID="XmlDataSource1"> </asp:FormView> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/XMLFile.xml" XPath="bookstore/book"> </asp:XmlDataSource>​
ועכשיו נרצה להוסיף <ItempTemplate> כדי לכתוב בתוכו באמת את שלושת הערכים שאנחנו רוצים (כותרת, מחיר ושפה).
<asp:FormView ID="FormView1" runat="server" DataSourceID="XmlDataSource1"> <ItemTemplate> price: <asp:Label Text='<%# XPath("price") %>' runat="server" ID="Label1" /><br /> name: <asp:Label Text='<%# XPath("title") %>' runat="server" ID="Label2" /><br /> name: <asp:Label Text='<%# XPath("title/@lang") %>' runat="server" ID="Label3" /><br /> </ItemTemplate> </asp:FormView> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/XMLFile.xml" XPath="bookstore/book"> </asp:XmlDataSource>​
אפשר לראות שבמקום מתודות Bind או Eval השתמשנו במתודת XPath שעובדת בצורה דומה. היא מקבלת אלמנט דמוי XmlNode, מריצה עליו ביטוי XPath ומחזירה את הערך הסקלארי שהוחזר. ובאמת הגענו למצב שכל האינפורמציה שאנחנו רוצים מוצגת באמצעות מתודת XPath.
 
למעלה