{"id":5983,"date":"2007-06-06T12:13:00","date_gmt":"2007-06-06T12:13:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2007\/06\/06\/visual-basic-xml-transform-teched-demo-prep\/"},"modified":"2024-07-05T14:45:31","modified_gmt":"2024-07-05T21:45:31","slug":"visual-basic-xml-transform-teched-demo-prep","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/visual-basic-xml-transform-teched-demo-prep\/","title":{"rendered":"Visual Basic XML Transform &#8211; TechEd demo prep"},"content":{"rendered":"<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Hello from Orlando! I\u2019ve been at TechEd 2007 this week in <i>very <\/i>sunny Orlando. As part of my demo prep, I had to create a little xml transform to convert the TechEd schedule that I got off the <\/font><a href=\"http:\/\/www.msteched.com\/\"><font face=\"Calibri\" size=\"3\">www.msteched.com<\/font><\/a><font face=\"Calibri\" size=\"3\"> website in an Excel XML format into a more readable xml file format. I could have done this all with one transform, but the newer XML file format made for good demo fodder to show off the XML Intellisense features coming in Orcas Beta2. <\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">I thought the code was interesting and fun \u2013 a great blend of XML properties, XML Literals, and query \u2013 so I\u2019ve posted it below:<\/font><\/p>\n<p class=\"MsoNormal\"><span>Imports<\/span><span> System.IO<\/span><\/p>\n<p class=\"MsoNormal\"><span>Imports<\/span><span> <span>&lt;<\/span><span>xmlns:ss<\/span><span>=<\/span><span>&#8220;<\/span><span>urn:schemas-microsoft-com:office:spreadsheet<\/span><span>&#8220;<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>Module<\/span><span> Module1<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;<\/span><span>&#8216;Metadata info<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;<\/span><span>Enum<\/span> Column<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Code<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Title<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Description<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Track<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Session<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Level<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Speaker<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Room<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>Timeslot<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;<\/span><span>End<\/span> <span>Enum<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;<\/span><span>Sub<\/span> Main()<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span><span>Dim<\/span> fromFile = <span>&#8220;C:TechEdScheduleExcelFormat.xml&#8221;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span><span>Dim<\/span> toFile = <span>&#8220;C:MyXMLFormat.xml&#8221;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span><span>Dim<\/span> excelXML = XElement.Load(fromFile)<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span><span>&#8216; Remove first row &#8211; metadata info<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span>excelXML&#8230;<span>&lt;<\/span>ss:Row<span>&gt;<\/span>.First.Remove()<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;<\/span><span>Dim<\/span> xml = _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;<\/span><span>&lt;?<\/span><span>xml<\/span> <span>version<\/span><span>=<\/span><span>&#8220;<\/span><span>1.0<\/span><span>&#8220;<\/span><span>?&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;<\/span><span>&lt;<\/span><span>EventSchedule<\/span> <span>Event<\/span><span>=<\/span><span>&#8220;<\/span><span>TechEd2007<\/span><span>&#8220;<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>&lt;%=<\/span> _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>From<\/span> session <span>In<\/span> excelXML&#8230;<span>&lt;<\/span>ss:Row<span>&gt;<\/span> _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>Let<\/span> info = session&#8230;<span>&lt;<\/span>ss:Data<span>&gt;<\/span> _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>Select<\/span> _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<\/span><span>Event<\/span> <span>ID<\/span><span>=<\/span><span>&lt;%=<\/span> info(Column.Code).Value <span>%&gt;<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Title<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Title).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Title<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Description<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Description).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Description<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Track<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Track).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Track<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Session<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Session).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Session<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Level<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Level).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Level<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Speaker<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Speaker).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Speaker<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>Room<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Room).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>Room<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&lt;<\/span><span>TimeSlot<\/span><span>&gt;<\/span><span>&lt;%=<\/span> info(Column.Timeslot).Value <span>%&gt;<\/span><span>&lt;\/<\/span><span>TimeSlot<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>&lt;\/<\/span><span>Event<\/span><span>&gt;<\/span> _<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>%&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;<\/span><span>&lt;\/<\/span><span>EventSchedule<\/span><span>&gt;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp; <\/span>xml.Save(toFile)<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp; <\/span>Shell(<span>&#8220;C:Program FilesInternet Exploreriexplore.exe &#8220;<\/span> &amp; toFile, AppWinStyle.MaximizedFocus)<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;<\/span><span>End<\/span> <span>Sub<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span><\/span><\/span><span>End<\/span><span> <span>Module<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">All this, so that in the demo, I could:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\" size=\"3\">1)<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Open the resulting file, \u201cMyXMLFormat.xml\u201d, in Visual Studio<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">2)<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Right click on the XML menu item<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">3)<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Select create schema to infer an XSD from that file:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><img decoding=\"async\" title=\"Create Schema\" height=\"151\" alt=\"Create Schema\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2007\/06\/InferSchema.jpg\" width=\"341\"><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">4)<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Save the schema as an XSD and add it as an existing item in my project:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font face=\"Calibri\" size=\"3\"><img decoding=\"async\" title=\"Save as XSD\" height=\"114\" alt=\"Save as XSD\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2007\/06\/SaveAsXSD.jpg\" width=\"458\">&nbsp;<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font face=\"Calibri\" size=\"3\">5)<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">And get an <i>awesome <\/i>Intellisense experience over the XML:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><img decoding=\"async\" title=\"XML Intellisense\" height=\"229\" alt=\"XML Intellisense\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2007\/06\/XMLIntellisense.jpg\" width=\"476\"><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Pretty cool, no? <\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello from Orlando! I\u2019ve been at TechEd 2007 this week in very sunny Orlando. As part of my demo prep, I had to create a little xml transform to convert the TechEd schedule that I got off the www.msteched.com website in an Excel XML format into a more readable xml file format. I could have [&hellip;]<\/p>\n","protected":false},"author":260,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[192,195],"tags":[28,94],"class_list":["post-5983","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-visual-basic","tag-amanda-silver","tag-linqvb9"],"acf":[],"blog_post_summary":"<p>Hello from Orlando! I\u2019ve been at TechEd 2007 this week in very sunny Orlando. As part of my demo prep, I had to create a little xml transform to convert the TechEd schedule that I got off the www.msteched.com website in an Excel XML format into a more readable xml file format. I could have [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/260"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=5983"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5983\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=5983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=5983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=5983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}