xmlvrac.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Xml.Linq;
  11. namespace Fuel01
  12. {
  13. /*****************
  14. * http://www.dotnetcurry.com/showarticle.aspx?ID=564
  15. * http://broadcast.oreilly.com/2010/10/understanding-c-simple-linq-to.html
  16. *******************/
  17. public partial class xmlvrac : Form
  18. {
  19. XDocument doc;
  20. XElement xelement;
  21. IEnumerable<XElement> employees;
  22. public xmlvrac()
  23. {
  24. InitializeComponent();
  25. }
  26. private void button1_Click(object sender, EventArgs e)
  27. {
  28. SaveDataToAnXmlFile(@"c:\tmp\test.Xml");
  29. }
  30. private XDocument GetStarbuzzData()
  31. {
  32. /*
  33. * You can use an XDocument to create an XML file, and that includes XML
  34. * files you can read and write using DataContractSerializer.
  35. *
  36. * An XMLDocument object represents an XML document. It's part of the
  37. * System.Xml.Linq namespace.
  38. *
  39. * Use XElement objects to create elements under the XML tree.
  40. */
  41. XDocument doc = new XDocument(
  42. new XDeclaration("1.0", "utf-8", "yes"),
  43. new XComment("Starbuzz Customer Loyalty Data"),
  44. new XElement("starbuzzData",
  45. new XAttribute("storeName", "Park Slope"),
  46. new XAttribute("location", "Brooklyn, NY"),
  47. new XElement("person",
  48. new XElement("personalInfo",
  49. new XElement("name", "Janet Venutian"),
  50. new XElement("zip", 11215)),
  51. new XElement("favoriteDrink", "Choco Macchiato"),
  52. new XElement("moneySpent", 255),
  53. new XElement("visits", 50)),
  54. new XElement("person",
  55. new XElement("personalInfo",
  56. new XElement("name", "Liz Nelson"),
  57. new XElement("zip", 11238)),
  58. new XElement("favoriteDrink", "Double Cappuccino"),
  59. new XElement("moneySpent", 150),
  60. new XElement("visits", 35)),
  61. new XElement("person",
  62. new XElement("personalInfo",
  63. new XElement("name", "Matt Franks"),
  64. new XElement("zip", 11217)),
  65. new XElement("favoriteDrink", "Zesty Lemon Chai"),
  66. new XElement("moneySpent", 75),
  67. new XElement("visits", 15)),
  68. new XElement("person",
  69. new XElement("personalInfo",
  70. new XElement("name", "Joe Ng"),
  71. new XElement("zip", 11217)),
  72. new XElement("favoriteDrink", "Banana Split in a Cup"),
  73. new XElement("moneySpent", 60),
  74. new XElement("visits", 10)),
  75. new XElement("person",
  76. new XElement("personalInfo",
  77. new XElement("name", "Sarah Kalter"),
  78. new XElement("zip", 11215)),
  79. new XElement("favoriteDrink", "Boring Coffee"),
  80. new XElement("moneySpent", 110),
  81. new XElement("visits", 15))));
  82. return doc;
  83. }
  84. private void SaveDataToAnXmlFile(string filename)
  85. {
  86. doc = GetStarbuzzData();
  87. doc.Save(filename);
  88. }
  89. private void QueryTheData(XDocument doc)
  90. {
  91. // Do a simple query and print the results to the console
  92. var data = from item in doc.Descendants("person")
  93. select new
  94. {
  95. drink = item.Element("favoriteDrink").Value,
  96. moneySpent = item.Element("moneySpent").Value,
  97. zipCode = item.Element("personalInfo").Element("zip").Value
  98. };
  99. foreach (var p in data)
  100. outTxt.AppendText(p.ToString() + "\r\n");
  101. // Do a more complex query and print the results to the console
  102. var zipcodeGroups = from item in doc.Descendants("person")
  103. group item.Element("favoriteDrink").Value
  104. by item.Element("personalInfo").Element("zip").Value
  105. into zipcodeGroup
  106. select zipcodeGroup;
  107. foreach (var group in zipcodeGroups)
  108. outTxt.AppendText(string.Format("{0} favorite drinks in {1}\r\n", group.Distinct().Count(), group.Key));
  109. }
  110. private void button2_Click(object sender, EventArgs e)
  111. {
  112. foreach (var employee in employees)
  113. {
  114. outTxt.AppendText(employee.ToString());
  115. }
  116. }
  117. private void button3_Click(object sender, EventArgs e)
  118. {
  119. xelement = XElement.Load(@"c:\tmp\employes.xml");
  120. employees = xelement.Elements();
  121. }
  122. private void write_one()
  123. {
  124. }
  125. private void button4_Click(object sender, EventArgs e)
  126. {
  127. var addresses = from address in xelement.Elements("Employee")
  128. where (string)address.Element("Address").Element("City") == "Paris"
  129. select address;
  130. foreach (XElement employee in addresses)
  131. {
  132. if (employee.Element("Name").Value == "Sam")
  133. employee.Element("Sex").ReplaceNodes("Petit");
  134. }
  135. }
  136. private void button6_Click(object sender, EventArgs e)
  137. {
  138. xelement.Save(@"c:\tmp\Employes.xml");
  139. }
  140. private void button5_Click(object sender, EventArgs e)
  141. {
  142. xelement.Add(new XElement("Employee",
  143. new XElement("EmpId", 5),
  144. new XElement("Name", "George"),
  145. new XElement("Sex", "Male"),
  146. new XElement("Phone", "423-555-4224", new XAttribute("Type", "Home")),
  147. new XElement("Phone", "424-555-0545", new XAttribute("Type", "Work")),
  148. new XElement("Address",
  149. new XElement("Street", "Fred Park, East Bay"),
  150. new XElement("City", "Paris"),
  151. new XElement("State", "CA"),
  152. new XElement("Zip", "95220"),
  153. new XElement("Country", "USA"))));
  154. }
  155. }
  156. }