<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://openxmldeveloper.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>About Open XML</title><link>http://openxmldeveloper.org/wiki/default.aspx</link><description>Open XML Developer Wiki.</description><dc:language /><generator>Telligent Community 5.6.582.12783 (Build: 5.6.582.12783)</generator><item><title>Wiki: OpenXMLDeveloper Wiki</title><link>http://openxmldeveloper.org/wiki/w/wiki/default.aspx</link><pubDate>Wed, 19 Jun 2013 17:04:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:1</guid><dc:creator>Anonymous</dc:creator><description /></item><item><title>Wiki Page: OpenXmlDeveloper Wiki</title><link>http://openxmldeveloper.org/wiki/w/wiki/default.aspx</link><pubDate>Wed, 12 Jun 2013 17:16:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:1</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;The Open XML Developer Wiki provides a variety of content that introduces Open XML and helps you get started.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;[[About Open XML]]&lt;br /&gt;[[Benefits of Open XML]]&lt;br /&gt;[[Open XML Developer Scenarios]]&lt;br /&gt;[[Comparison of Open XML to ODF]]&lt;br /&gt;[[About Open Packaging Conventions]]&lt;br /&gt;[[About WordprocessingML]]&lt;br /&gt;[[About SpreadsheetML]]&lt;br /&gt;[[About PresentationML]]&lt;/p&gt;  &lt;p&gt;Open XML Tools and Specialized Programming Interfaces &lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;Resource Center: [[PowerTools for Open XML]]&lt;br /&gt;Resource Center:&amp;nbsp;[[DocumentBuilder]]&lt;br /&gt;Resource Center:&amp;nbsp;[[PresentationBuilder]]&lt;br /&gt;Resource Center: [[Open XML and JavaScript]]&lt;br /&gt;Resource Center: [[Open XML SDK for JavaScript]]&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Screen-cast Series&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;[[Introduction to Open XML]]&lt;br /&gt;&lt;span style="font-size:12px;"&gt;[[Recursive Pure Functional Transforms of XML]]&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Open XML Content List&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;[[Open XML content by keyword]]&lt;br /&gt;[[Open XML content by author]]&lt;/p&gt;</description></item><item><title>Wiki Page: Overview of the Open XML SDK for JavaScript API</title><link>http://openxmldeveloper.org/wiki/w/wiki/overview-of-the-open-xml-sdk-for-javascript-api.aspx</link><pubDate>Wed, 12 Jun 2013 14:24:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:31</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;There are essentially three &amp;lsquo;classes&amp;rsquo; in the API.&amp;nbsp; Of  course, JavaScript does not have classes as such, but there are three types of  objects in the API that can be described as classes:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;&lt;span style="float:right;width:20%;margin:0 8px 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript.aspx"&gt;Return to the Table of Contents&lt;/a&gt;&lt;/span&gt;&lt;b&gt;OpenXmlPackage&lt;/b&gt; &amp;ndash; this class abstracts a package, whether it be a WordprocessingML document, a SpreadsheetML document, or a PresentationML document.  This class contains the list of parts, and does some housekeeping associated with the [Content_Types].xml file in the package.  This class also contains some methods for maintaining the list of relationships from the package to the main parts, i.e. the main document part, the workbook part, or the presentation part.  It also contains the functionality to open a package, and to serialize the package to base64 or to Flat OPC.&lt;/li&gt;  &lt;li class="apiLi"&gt;&lt;b&gt;OpenXmlPart&lt;/b&gt; &amp;ndash; this class abstracts the parts in a package.  It contains the URI of the part, the content type of the part, and the part type (whether it is binary or XML).  It also contains some methods for maintaining the list of relationships from this part to other parts.&lt;/li&gt;  &lt;li class="apiLi"&gt;&lt;b&gt;OpenXmlRelationship&lt;/b&gt; &amp;ndash; this class contains the information about a relationship, whether it be from the package to a part, or from a part to another part.  It contains the relationship ID, the relationship type, whether the relationship is internal or external, and the target of the relationship. There is no functionality associated with &lt;b&gt;OpenXmlRelationship&lt;/b&gt; objects - all functionality to add or delete relationships is in the &lt;b&gt;OpenXmlPackage&lt;/b&gt; and &lt;b&gt;OpenXmlPart&lt;/b&gt; objects. &amp;nbsp;This type is used only for return values of the various functions that retrieve relationships from the package and parts.&lt;/li&gt;  &lt;/ul&gt;  &lt;h2 class="apiSubHead"&gt;Opening a Word Document, a Spreadsheet, or a Presentation&lt;/h2&gt;  &lt;p class="apiPara"&gt;To open an Open XML file, you pass either a binary document  that is encoded in base64 ASCII, or you pass a Flat OPC document as a string.&amp;nbsp;  For instance, to open a DOCX that is encoded with base64 ASCII, the code would  look as follows:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open a document that is stored as a base64 string.  var doc = new openXml.OpenXmlPackage(document_base64);&lt;/pre&gt;  &lt;p class="apiPara"&gt;Opening a document that is stored as XML in the Flat OPC  form is exactly the same:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open a document that is stored as XML in the Flat OPC format.  var doc = new openXml.OpenXmlPackage(document_flatOpc);&lt;/pre&gt;  &lt;p class="apiPara"&gt;There are several ways to get your hands on an base64  encoded DOCX, XLSX, or PPTX:&lt;/p&gt;  &lt;ol&gt;  &lt;li class="apiLi"&gt;You can enable the end-user to click on a small flash control (that looks like a button), which loads the file from the file system and passes the base64 encoded ASCII to your JavaScript code.&lt;/li&gt;  &lt;li class="apiLi"&gt;You can manually convert a binary document to base64 encoded ASCII, and then transform the long string into code to initialize a JavaScript variable.  This is a convenient way to store a template document or spreadsheet, which you will then modify programmatically and then enable the end-user to save locally.&lt;/li&gt;  &lt;li class="apiLi"&gt;You can request the document from the web server using an httpRequest.  The ajax method of jQuery is a convenient way to do this.&lt;/li&gt;  &lt;li class="apiLi"&gt;When using Node.js, you can simply open the DOCX, XLSX, or PPTX.  Node.js doesn&amp;rsquo;t have or need the same restrictions as JavaScript code that is running in the browser.&lt;/li&gt;  &lt;li class="apiLi"&gt;When writing an Office Client App for Word 2013, or when writing a SharePoint 2013 App, you can retrieve documents from document libraries.&lt;/li&gt;  &lt;li class="apiLi"&gt;Windows 8 &amp;lsquo;Store&amp;rsquo; applications have their own means for finding and opening documents.   I&amp;rsquo;ll cover these techniques when I write the Windows 8 blog-posts and screen-casts.&lt;/li&gt;  &lt;/ol&gt;  &lt;p class="apiPara"&gt;Once you have opened the document, you typically will &amp;lsquo;dot&amp;rsquo;  into one of the convenience functions that retrieve the main part of the  package.&amp;nbsp; For example, if you have opened a &lt;b&gt;WordprocessingML&lt;/b&gt; document,  you &amp;lsquo;dot&amp;rsquo; into the &lt;b&gt;mainDocumentPart&lt;/b&gt; function:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;var doc = new openXml.OpenXmlPackage(openXmlDocument);  var mainPart = doc.mainDocumentPart();&lt;/pre&gt;  &lt;p class="apiPara"&gt;After you have navigated to the part that you want to query  or modify, you then call the &lt;b&gt;getXDocument&lt;/b&gt; method, which retrieves the &lt;b&gt;XDocument&lt;/b&gt;  object (from LINQ to XML for JavaScript).&amp;nbsp; You can either query the document or  you can modify the document.&amp;nbsp; The following code shows opening a document,  creating a new paragraph element, finding the &lt;b&gt;w:body&lt;/b&gt; part, finding the  last paragraph in the &lt;b&gt;w:body&lt;/b&gt; part, and then inserting the new paragraph  element after the last paragraph.&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open the document, which is stored as a base64 string.  var doc = new openXml.OpenXmlPackage(openedFileData);    // Create a paragraph.  var p = new XElement(W.p,      new XElement(W.r,          new XElement(W.t, &amp;quot;Hello Open XML World&amp;quot;)));    // Append the paragraph to the document.  var body = doc.mainDocumentPart().getXDocument().root.element(W.body);  var lastPara = body.elements(W.p).lastOrDefault();  if (lastPara !== null) {      lastPara.addAfterSelf(p);  }&lt;/pre&gt;  &lt;p class="apiPara"&gt;When you modify the &lt;b&gt;XDocument&lt;/b&gt; object that you  retrieve using the &lt;b&gt;getXDocument&lt;/b&gt; method, your changes will be  automatically included when you serialize the document to either a DOCX in  base64 encoded ASCII, or when you serialize to XML in the Flat OPC format.&lt;/p&gt;  &lt;p class="apiPara"&gt;Once you have opened a document, spreadsheet, or  presentation, you can also modify the package in the typical ways you need to  do with Open XML &amp;ndash; you can add or delete relationships, and add or delete  parts.&lt;/p&gt;  &lt;p class="apiPara"&gt;When you have made all desired modifications to the package,  you can then serialize to XML in the Flat OPC form:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;var flatOpcString = doc.saveToFlatOpc();&lt;/pre&gt;  &lt;p class="apiPara"&gt;You can also, of course, serialize to a binary DOCX, XLSX,  or PPTX in base64 encoded ASCII:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;var b64string = doc.saveToBase64();&lt;/pre&gt;  &lt;p class="apiPara"&gt;There are several ways to save the Flat OPC or the base64  encoded DOCX, XLSX, or PPTX:&lt;/p&gt;  &lt;ol&gt;  &lt;li class="apiLi"&gt;You can enable the end-user to click on a small flash control (that looks like a button), which opens up a File Save-As dialog.  The user can navigate to their desired location and save the DOCX or Flat OPC to their local storage.&lt;/li&gt;  &lt;li class="apiLi"&gt;You can use httpRequest to send the document back to your web server.&lt;/li&gt;  &lt;li class="apiLi"&gt;If using Node.Js, you can simply write code to save to the file system.&lt;/li&gt;  &lt;li class="apiLi"&gt;When writing a Word 2013 App, you can replace the selection or the entire document with the newly serialized Flat OPC.&lt;/li&gt;  &lt;li class="apiLi"&gt;When writing an Office Client or SharePoint App, you can serialize to a document library.&lt;/li&gt;  &lt;/ol&gt;</description></item><item><title>Wiki Page: Open XML SDK for JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/open-xml-sdk-for-javascript.aspx</link><pubDate>Wed, 12 Jun 2013 14:18:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:29</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;The Open XML SDK for JavaScript is a light-weight JavaScript  API that enables you to create, modify, or query Open XML documents.&amp;nbsp; It is  useful in the following scenarios:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;Client-side Open XML applications that run in the browser&lt;/li&gt;  &lt;li class="apiLi"&gt;Server-side applications using Node.js&lt;/li&gt;  &lt;li class="apiLi"&gt;Windows 8 &amp;ldquo;Windows Store&amp;rdquo; applications&lt;/li&gt;  &lt;li class="apiLi"&gt;Apps for Office Client 2013&lt;/li&gt;  &lt;li class="apiLi"&gt;Apps for SharePoint 2013&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;You must be familiar with the Open Packaging Conventions  (OPC) in order to use the Open XML SDK for JavaScript.&amp;nbsp; If you need a refresher  on OPC, you can watch the screen-casts on OPC (#7 and #8 in the screen-cast  series &lt;a href="/wiki/w/wiki/introduction-to-open-xml.aspx"&gt;Introduction  to Open XML&lt;/a&gt;).&amp;nbsp; You may also be interested in reading the MSDN article &lt;a href="http://msdn.microsoft.com/en-us/library/office/ee361919.aspx"&gt;Essentials of the Open  Packaging Conventions&lt;/a&gt;.&lt;/p&gt;  &lt;h2 class="apiSubHead"&gt;Table of Contents&lt;/h2&gt;  &lt;div id="oxdDocToc"&gt;      &lt;ul&gt;  &lt;li&gt;        &lt;a href="#"&gt;Guide&lt;/a&gt;          &lt;ul&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/scenarios-of-the-open-xml-sdk-for-javascript.aspx"&gt;Overview of Scenarios for the Open XML SDK for JavaScript&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/overview-of-the-open-xml-sdk-for-javascript-api.aspx"&gt;Overview of the Open XML SDK for JavaScript API&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlsdkjs_demo.aspx"&gt;Document Generation Demo&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/the-use-of-linq-to-xml-for-javascript.aspx"&gt;Linq to XML for JavaScript&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/open-xml-element-and-attribute-names.aspx"&gt;Pre-initialized Open XML Element and Attribute Names&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/accessing-parts-using-convenience-functions.aspx"&gt;Accessing Parts using Convenience Functions&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/the-use-of-flash-and-the-open-xml-sdk-for-javascript.aspx"&gt;Use of Flash to Enable Uploading and Downloading Documents&lt;/a&gt;          &lt;/li&gt;  &lt;/ul&gt;  &lt;/li&gt;  &lt;li&gt;        &lt;a href="#"&gt;OpenXmlPackage&lt;/a&gt;          &lt;ul&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_base64.aspx"&gt;new OpenXmlPackage(base64)&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_flatopc.aspx"&gt;new OpenXmlPackage(flatOpc)&lt;/a&gt;            &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_addpart.aspx"&gt;addPart&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_addrelationship.aspx"&gt;addRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_deletepart.aspx"&gt;deletePart&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_deleterelationship.aspx"&gt;deleteRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getcontentType.aspx"&gt;getContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartbyid.aspx"&gt;getPartById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartbyrelationshiptype.aspx"&gt;getPartByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartbyuri.aspx"&gt;getPartByUri&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getparts.aspx"&gt;getParts&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartsbycontenttype.aspx"&gt;getPartsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartsbyrelationshiptype.aspx"&gt;getPartsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationshipbyid.aspx"&gt;getRelationshipById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationships.aspx"&gt;getRelationships&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationshipsbycontenttype.aspx"&gt;getRelationshipsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationshipsbyrelationshiptype.aspx"&gt;getRelationshipsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_savetobase64.aspx"&gt;saveToBase64&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_savetoflatopc.aspx"&gt;saveToFlatOpc&lt;/a&gt;          &lt;/li&gt;  &lt;/ul&gt;  &lt;/li&gt;  &lt;li&gt;        &lt;a href="#"&gt;OpenXmlPart&lt;/a&gt;          &lt;ul&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_addrelationship.aspx"&gt;addRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_deleterelationship.aspx"&gt;deleteRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartbyid.aspx"&gt;getPartById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartbyrelationshiptype.aspx"&gt;getPartByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getparts.aspx"&gt;getParts&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartsbycontenttype.aspx"&gt;getPartsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartsbyrelationshiptype.aspx"&gt;getPartsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationshipbyid.aspx"&gt;getRelationshipById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationships.aspx"&gt;getRelationships&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationshipsbycontenttype.aspx"&gt;getRelationshipsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationshipsbyrelationshiptype.aspx"&gt;getRelationshipsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getxdocument.aspx"&gt;getXDocument&lt;/a&gt;          &lt;/li&gt;  &lt;/ul&gt;  &lt;/li&gt;  &lt;/ul&gt;  &lt;/div&gt;</description></item><item><title>Wiki Page: The use of LINQ to XML for JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/the-use-of-linq-to-xml-for-javascript.aspx</link><pubDate>Wed, 12 Jun 2013 14:17:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:32</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;The Open XML SDK for JavaScript uses LINQ to XML for  JavaScript, which is an open source project on CodePlex that enables the use of  many of the convenient patterns and idioms of LINQ to XML for the .NET  Framework.&lt;/p&gt;  &lt;p class="apiPara"&gt;&lt;span style="float:right;width:20%;margin:0 8px 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript.aspx"&gt;Return to the Table of Contents&lt;/a&gt;&lt;/span&gt;Read more about the API and idioms in the &lt;a href="/blog/b/openxmldeveloper/archive/2012/10/23/new-open-source-project-linq-to-xml-for-javascript.aspx"&gt;LINQ  to XML for JavaScript Overview&lt;/a&gt;.&amp;nbsp; The overview contains a listing of the  types, methods and properties of LINQ to XML for JavaScript.&lt;/p&gt;  &lt;p class="apiPara"&gt;You can find forums, discussions of issues, and the source  code at &lt;a href="https://ltxmljs.codeplex.com/"&gt;Linq to XML for JavaScript on  CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p class="apiPara"&gt;LINQ to XML for JavaScript, in turn, has a dependency on the  &lt;a href="https://linqjs.codeplex.com/"&gt;LINQ for JavaScript project&lt;/a&gt;, also on  CodePlex.&lt;/p&gt;  &lt;p class="apiPara"&gt;One of the most powerful patterns that we find with LINQ to  XML for JavaScript is that of Recursive Pure Functional Transformations  (RPFT).&amp;nbsp; Here is a &lt;a href="/wiki/w/wiki/recursive-pure-functional-transforms-of-xml.aspx"&gt;screen-cast  series on writing Recursive Pure Functional Transformations&lt;/a&gt;.&lt;/p&gt;  &lt;p class="apiPara"&gt;You also need to be familiar with the pre-initialized &lt;a href="/wiki/w/wiki/open-xml-element-and-attribute-names.aspx"&gt;Open XML Element and Attribute Names&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Wiki Page: Scenarios of the Open XML SDK for JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/scenarios-of-the-open-xml-sdk-for-javascript.aspx</link><pubDate>Tue, 11 Jun 2013 15:21:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:30</guid><dc:creator>Eric White</dc:creator><description>&lt;h2 class="apiSubHead"&gt;Client-Side Open XML Applications that Run In-Browser&lt;/h2&gt;  &lt;p class="apiPara"&gt;&lt;span style="float:right;width:20%;margin:0 8px 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript.aspx"&gt;Return to the Table of Contents&lt;/a&gt;&lt;/span&gt;You can build client-side Open XML applications that run in  the browser.&amp;nbsp; This enables you to provide Open XML functionality to your users  without requiring them to install an executable such as a .NET application. You  might create an application to:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;Collect input from the user and build a custom Word document such as a legal document, a sales proposal, or a management report.  Of course, one of the cool things about these types of JavaScript applications is that they are super-easy to demonstrate.  You can find a number of Open XML SDK for JavaScript applications hosted here at OpenXmlDeveloper.org.  This &lt;a href="/blog/b/openxmldeveloper/p/openxmlsdkjs_demo.aspx"&gt;Open XML SDK for JavaScript document generation example&lt;/a&gt; shows one approach to building this variety of application. &lt;/li&gt;  &lt;li class="apiLi"&gt;Collect selection criteria and build a custom Spreadsheet that enables you to provide interesting functionality that they can run locally using Excel.&lt;/li&gt;  &lt;li class="apiLi"&gt;Build a PowerPoint Presentation dynamically so that sales folks have a presentation tailored exactly to their current sales prospects.&lt;/li&gt;  &lt;li class="apiLi"&gt;Enable the user to upload a Spreadsheet that contains data that they want to submit to the server.&lt;/li&gt;  &lt;li class="apiLi"&gt;Enable the user to submit a Word document for validation.  You might enable them to check that it meets corporate policy with regards to recommended phrasing or disallowed words.&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;One interesting scenario is that there are a fair number of  developer tools that we can build using the Open XML SDK for JavaScript.&amp;nbsp; Some  ideas are:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;Generate a number of random documents for testing purposes.  These documents can contain optionally contain a large number of Open XML features, such as tables, headers, footers, comments, content controls, and etc.&lt;/li&gt;  &lt;li class="apiLi"&gt;Query an Open XML document to see metrics on it, and to see the features that it uses.  You can know whether it contains comments, foot notes, or RTL text.  I anticipate that this utility will query and report on a few dozen features.&lt;/li&gt;  &lt;li class="apiLi"&gt;Simplify a document, removing features such as RSID attributes, comments, content controls, and MC markup.&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;Plans are that over time, we&amp;rsquo;ll be writing and hosting these  applications here on OpenXmlDeveloper.org.&lt;/p&gt;  &lt;p class="apiPara"&gt;Currently, it is fairly easy to build a web-application with  Open XML functionality using server-side technologies, such as the Open XML SDK  from within an ASP.NET application.&amp;nbsp; However, if you can&amp;rsquo;t use the Open XML SDK  and the .NET Framework, life becomes more difficult.&amp;nbsp; Supplying Open XML  functionality in the browser has several advantages.&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;First, this approach will work regardless of the server-side technology that you are using.  It doesn&amp;rsquo;t matter whether you are using Java, PHP, or Ruby (or of course C# / .NET).  If you can serve up JavaScript, you can serve up Open XML functionality.&lt;/li&gt;  &lt;li class="apiLi"&gt;Second, you can deliver this functionality without requiring your users to upload documents to your server.  This frees up server resources, and in some situations, enables interesting scenarios where clients do not want to expose confidential information in their documents.  You can assure them that their document will not leave their browser.&lt;/li&gt;  &lt;li class="apiLi"&gt;You can deliver this functionality to a wide variety of platforms, including some tablets, Macs, Linux / Unix, and phones.&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;The Open XML SDK for JavaScript has been tested with IE 9, IE  10, Chrome 27.0, and FireFox 20.0.1.&amp;nbsp; As time allows, we will test against  earlier versions of browsers.&amp;nbsp; To a certain extent, the Open XML SDK for  JavaScript relies on modern JavaScript engines such as Chakra and Chrome V8.&lt;/p&gt;  &lt;h2 class="apiSubHead"&gt;Node.Js Server Applications&lt;/h2&gt;  &lt;p class="apiPara"&gt;If you need to build server-side Open XML functionality, you  can use Node.Js to implement the functionality, and then use interop to call  Node.Js from Java, C++, or other server-side technologies.&lt;/p&gt;  &lt;p class="apiPara"&gt;It may be possible that the ability of Node.Js to take  advantage of multiple cores may enable high-performance Open XML  functionality.&amp;nbsp; This is a research project for the future.&lt;/p&gt;  &lt;p class="apiPara"&gt;One key use for Node.Js is testing your Open XML code.&amp;nbsp;  After writing a few thousand lines of Open XML code in JavaScript, you will  want to run that code over your library of test documents. You can structure  your tests so that they are isolated from whether they run in the browser or  run using Node, and then build a test harness to exercise your code with  hundreds or thousands of test documents.&lt;/p&gt;  &lt;h2 class="apiSubHead"&gt;Touch-Enabled Windows-8 &amp;lsquo;Windows Store&amp;rsquo; Applications&lt;/h2&gt;  &lt;p class="apiPara"&gt;There is a lot of fun to be had with this scenario.&amp;nbsp;  Combining touch, HTML5, CSS3, and Open XML presents interesting opportunities  for writing collaboration and document manipulation applications.&lt;/p&gt;  &lt;h2 class="apiSubHead"&gt;Apps for Office Clients&lt;/h2&gt;  &lt;p class="apiPara"&gt;When you are writing a JavaScript app for Word, you have the  capability of retrieving the Open XML markup for any range of the document,  modify it as appropriate, and then set the contents of the range.&amp;nbsp; Having the  Open XML SDK for JavaScript enables a lot of interesting applications.&lt;/p&gt;  &lt;p class="apiPara"&gt;While it is possible to extend Office using VBA or VSTO in  Windows 7 and Windows 8, with Windows RT, JavaScript is the only extensibility  approach for the Office clients, so accessing Open XML using JavaScript becomes  even more important.&lt;/p&gt;  &lt;h2 class="apiSubHead"&gt;Apps for SharePoint 2013&lt;/h2&gt;  &lt;p class="apiPara"&gt;One of the easiest ways to extend SharePoint is to write  JavaScript code.&amp;nbsp; It sidesteps all the issues associated with installing code  on the server.&amp;nbsp; In some cases, it is difficult to install code on the server.&amp;nbsp;  In others, it is completely prohibited.&amp;nbsp; So having the capability of writing  Open XML applications in JavaScript makes it super-easy to add Open XML  functionality to SharePoint.&lt;/p&gt;</description></item><item><title>Wiki Page: The Use of Flash and the Open XML SDK for JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/the-use-of-flash-and-the-open-xml-sdk-for-javascript.aspx</link><pubDate>Tue, 11 Jun 2013 15:11:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:34</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;For some time, the ability to load files from the local file  system into local JavaScript variables, and to save files from local JavaScript  variables to the local file system has been deemed to be a security risk.  However, with the development of more and more powerful Web applications that  use a log of client-side JavaScript, the need to do this has increased.&amp;nbsp; At the  same time, security experts have decided, to a large extent, that if we place  certain limitations on loading and save files from/to the local file system, it  is not a security risk.&amp;nbsp; The limitations are:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;&lt;span style="float:right;width:20%;margin:0 8px 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript.aspx"&gt;Return to the Table of Contents&lt;/a&gt;&lt;/span&gt;The only capability of JavaScript / HTML5 is to put up a user interface control and enable the end-user to click on it.  Without a specific user action, JavaScript can&amp;rsquo;t load or save a file.&lt;/li&gt;  &lt;li class="apiLi"&gt;When the user loads a file, the only information that the user retrieves is the data in the file, and the name of the file (but not the path or location of the file).&lt;/li&gt;  &lt;li class="apiLi"&gt;When the user saves a file, your JavaScript program can suggest a default filename, however, the JavaScript code can&amp;rsquo;t access the actual details of where the end-user saved the file.&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;This is the direction being taken by the W3C committees.&amp;nbsp;  The &lt;a href="http://dev.w3.org/2006/webapi/FileAPI/#filereader-interface"&gt;FileReader  interface&lt;/a&gt; enables opening files, and the &lt;a href="http://www.w3.org/TR/file-writer-api/"&gt;FileWriter API&lt;/a&gt; enables saving  to the local file system.&amp;nbsp; However, these are works in progress.&amp;nbsp; Support is  spotty.&lt;/p&gt;  &lt;p class="apiPara"&gt;In the mean-time, there is a work-around.&amp;nbsp; From Flash 10  onwards, it has been possible in ActionScript to read and write to the local  file system (with the same limitations as listed above).&amp;nbsp; Further, there is  interop between ActionScript and JavaScript so that it is easy to pass data  both directions.&amp;nbsp; This means that it is possible to write a small Flash module  that does the actual loading and saving of files, and then use those Flash  modules from JavaScript.&lt;/p&gt;  &lt;p class="apiPara"&gt;You can find out more about this approach in the screen-cast  &lt;a href="/blog/b/openxmldeveloper/archive/2012/08/02/working-with-open-xml-documents-using-javascript.aspx"&gt;Working  with Open XML Documents using JavaScript&lt;/a&gt;.&lt;/p&gt;  &lt;p class="apiPara"&gt;There will be more deep-dive blog posts and screen-casts  into this subject in the future here at OpenXmlDeveloper.org.&lt;/p&gt;</description></item><item><title>Wiki Page: Open XML Element and Attribute Names</title><link>http://openxmldeveloper.org/wiki/w/wiki/open-xml-element-and-attribute-names.aspx</link><pubDate>Tue, 11 Jun 2013 15:10:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:33</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;There are hundreds of tag names in Open XML, in a wide  variety of namespaces.&amp;nbsp; One effective approach is to initialize many of these  names and namespaces, so that instead of using strings, we can use properties  of objects.&lt;/p&gt;  &lt;p class="apiPara"&gt;&lt;span style="float:right;width:20%;margin:0 8px 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript.aspx"&gt;Return to the Table of Contents&lt;/a&gt;&lt;/span&gt;Every &lt;b&gt;XName&lt;/b&gt; object in LINQ to XML for JavaScript is  &amp;lsquo;atomized&amp;rsquo;, which means that if you initialize two variables to the same  qualified tag name, they will both be references to the same object.&amp;nbsp; A key  performance advantage is that if we want to compare a tag name of an element to  a given qualified tag name, then instead of doing string comparisons, which  might tend to be slow, we can simply compare object identities.&lt;/p&gt;  &lt;p class="apiPara"&gt;The blog post, &lt;a href="http://blogs.msdn.com/b/ericwhite/archive/2007/12/06/atomized-xname-and-xnamespace-objects.aspx"&gt;Atomized  XName and XNamespace Objects&lt;/a&gt;, while about LINQ to XML for the .NET  Framework, not JavaScript, gives an explanation of what atomization is.&amp;nbsp; The  blog post &lt;a href="/blog/b/openxmldeveloper/archive/2012/10/24/linq-to-xml-for-javascript-gaining-performance-through-atomization.aspx"&gt;LINQ  to XML for JavaScript - Gaining Performance through Atomization&lt;/a&gt; discusses  this from the JavaScript point of view.&lt;/p&gt;  &lt;p class="apiPara"&gt;If you look in &lt;b&gt;openxml.js&lt;/b&gt;, you will see a number of  initialized objects.&amp;nbsp; They all follow the following pattern:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;openXml.wNs = new XNamespace(&amp;quot;http://schemas.openxmlformats.org/wordprocessingml/2006/main&amp;quot;);  var wNs = openXml.wNs;  openXml.W = {      abstractNum: new XName(wNs, &amp;quot;abstractNum&amp;quot;),      abstractNumId: new XName(wNs, &amp;quot;abstractNumId&amp;quot;),      accent1: new XName(wNs, &amp;quot;accent1&amp;quot;),      accent2: new XName(wNs, &amp;quot;accent2&amp;quot;),      accent3: new XName(wNs, &amp;quot;accent3&amp;quot;),      accent4: new XName(wNs, &amp;quot;accent4&amp;quot;),      accent5: new XName(wNs, &amp;quot;accent5&amp;quot;),      accent6: new XName(wNs, &amp;quot;accent6&amp;quot;),      activeRecord: new XName(wNs, &amp;quot;activeRecord&amp;quot;),      ....  };&lt;/pre&gt;  &lt;p class="apiPara"&gt;The use of these objects is as follows:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open a blank document that is stored as a base64 string.  var doc = new openXml.OpenXmlPackage(blankDocument_base64);    // Create a paragraph.  var p = new XElement(W.p,      new XElement(W.r,          new XElement(W.t, &amp;quot;Hello Open XML World&amp;quot;)));    // Replace the first paragraph in the document with the new paragraph.  doc.mainDocumentPart()      .getXDocument()      .descendants(W.p)      .firstOrDefault()      .replaceWith(p);&lt;/pre&gt;  &lt;p class="apiPara"&gt;When writing the code to pre-atomize the &lt;b&gt;XName&lt;/b&gt; and &lt;b&gt;XNamespace&lt;/b&gt;  objects, I elected to not to attempt to have all tag names for the entire Open  XML standard.&amp;nbsp; Instead, I opted for the most commonly used tag names.&amp;nbsp; While I  do not expect you to regularly encounter the need for &lt;b&gt;XName&lt;/b&gt; objects  other than the ones that I have initialized in &lt;b&gt;openxml.js&lt;/b&gt;, if you do  need a non-initialized &lt;b&gt;XName&lt;/b&gt; object, you can initialize it in place.&amp;nbsp;  You use the &lt;b&gt;new&lt;/b&gt; operator with the &lt;b&gt;XName &lt;/b&gt;object:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;var newName = new XName(wNs, &amp;quot;newName&amp;quot;);&lt;/pre&gt;</description></item><item><title>Wiki Page: Accessing Parts using Convenience Functions</title><link>http://openxmldeveloper.org/wiki/w/wiki/accessing-parts-using-convenience-functions.aspx</link><pubDate>Tue, 11 Jun 2013 14:43:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:28</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;The normal way to navigate from the package to the main  document part, or to navigate from one part to another part is through  relationships.&amp;nbsp; From one point of view, there are two varieties of relationships  &amp;ndash; implicit relationships and explicit relationships:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;&lt;span style="float:right;width:20%;margin:0 8px 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript.aspx"&gt;Return to the Table of Contents&lt;/a&gt;&lt;/span&gt;&lt;b&gt;Implicit relationships&lt;/b&gt; &amp;ndash; these relationships are used in  Open XML when there is only one target part of a given relationship type.&amp;nbsp;  While the relationship has a relationship ID, you will not find a reference to  this relationship ID in the markup for the source part.&amp;nbsp; Instead, if you want  to get that related part, you look for a relationship with a given relationship  type.&amp;nbsp; If it exists, then you can open the related part.&amp;nbsp; An example of this  type of relationship is the relationship in WordprocessingML from the main  document part to the comments part.&amp;nbsp; A document may or may not have comments,  so it may or may not have a comments part.&amp;nbsp; To navigate to the comments part,  you look for a relationship with the relationship type of &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments&amp;quot;.&lt;/li&gt;  &lt;li class="apiLi"&gt;&lt;b&gt;Explicit relationships&lt;/b&gt; &amp;ndash; these relationships are used in  Open XML when there may be more than one target part of a given relationship  type.&amp;nbsp; You will always find markup in the source part that contains the  relationship ID.&amp;nbsp; If you want to retrieve the related parts, you typically find  the markup in the source part that contains the reference to the related part.&amp;nbsp;  You get the relationship ID from the markup, and then look up the relationship  by its relationship ID.&amp;nbsp; An example of this type of relationship is the  relationship in WordprocessingML from the main document part to a header part.&amp;nbsp;  There may be multiple header parts, so to navigate to the header part, you  first find the markup for the section properties in the main document part.&amp;nbsp;  You then find the markup for the relationship to the header part and retrieve  the relationship ID.&amp;nbsp; You then retrieve the relationship with the given ID, and  can retrieve the related part from the relationship that you found.&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;Note that most of the commonly used relationship types and  content types are pre-defined in &lt;b&gt;openxml.js&lt;/b&gt;.&amp;nbsp; The code that defines  these relationship and content types looks like this (sorry for the small font, but it looks better when it does not wrap):&lt;/p&gt;  &lt;pre class="prettyprint" style="font-size:10px;"&gt;// *********** relationship types ***********  openXml.relationshipTypes = {      alternativeFormatImport: &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk&amp;quot;,      calculationChain: &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain&amp;quot;,      cellMetadata: &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata&amp;quot;,      chart: &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart&amp;quot;,      chartColorStyle: &amp;quot;http://schemas.microsoft.com/office/2011/relationships/chartColorStyle&amp;quot;,      ...      worksheet: &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet&amp;quot;,      worksheetComments: &amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments&amp;quot;,      worksheetSortMap: &amp;quot;http://schemas.microsoft.com/office/2006/relationships/wsSortMap&amp;quot;,      xmlSignature: &amp;quot;http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature&amp;quot;,  };        // ********************* content types ***********************  openXml.contentTypes = {      calculationChain: &amp;quot;application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml&amp;quot;,      cellMetadata: &amp;quot;application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml&amp;quot;,      chart: &amp;quot;application/vnd.openxmlformats-officedocument.drawingml.chart+xml&amp;quot;,      chartColorStyle: &amp;quot;application/vnd.ms-office.chartcolorstyle+xml&amp;quot;,      chartDrawing: &amp;quot;application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml&amp;quot;,      ...      worksheetComments: &amp;quot;application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml&amp;quot;,      worksheetSortMap: &amp;quot;application/vnd.ms-excel.wsSortMap+xml&amp;quot;,      xmlSignature: &amp;quot;application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml&amp;quot;,  };&lt;/pre&gt;  &lt;p class="apiPara"&gt;For many of the explicit relationships, there are  convenience functions that make it easier to retrieve the related part.&amp;nbsp; To  demonstrate the use of the convenience functions, first let us take a look at  how to retrieve a part when not using the convenience functions.&lt;/p&gt;  &lt;p class="apiPara"&gt;You can find the main document part like this:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open a blank document that is stored as a base64 string.  var doc = new openXml.OpenXmlPackage(blankDocument_base64);    // Get the main document part.  var mainPart = doc.getPartByRelationshipType(openXml.relationshipTypes.mainDocument);&lt;/pre&gt;  &lt;p class="apiPara"&gt;When using the convenience function, the code looks like  this:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open a document that is stored as a base64 string.  var doc = new openXml.OpenXmlPackage(document_base64);    // Get the main document part.  var mainPart = doc.mainDocumentPart();&lt;/pre&gt;  &lt;p class="apiPara"&gt;This pattern should look familiar &amp;ndash; it is the same pattern  as followed by the Open XML SDK for the .NET Framework.&lt;/p&gt;  &lt;p class="apiPara"&gt;The difference in coding is more pronounced when finding the  comments part:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;// Open a document that is stored as a base64 string.  var doc = new openXml.OpenXmlPackage(document_base64);    // Get the main document part.  var mainPart = doc.mainDocumentPart().wordprocessingCommentsPart();&lt;/pre&gt;  &lt;p class="apiPara"&gt;If we examine the &lt;b&gt;wordprocessingCommentsPart&lt;/b&gt;  function, we see that it is defined like this:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;openXml.OpenXmlPart.prototype.wordprocessingCommentsPart = function () {      return this.getPartByRelationshipType(          openXml.relationshipTypes.wordprocessingComments);  };&lt;/pre&gt;  &lt;p class="apiPara"&gt;You can see that these convenience methods are pretty  simple.&amp;nbsp; However, these navigation operations are pretty comment.&amp;nbsp; We often  need to write code to navigate from the package to the main document part, or  navigate from the main document part to the comments part or styles part, so these  convenience methods make it quite a bit easier.&lt;/p&gt;  &lt;p class="apiPara"&gt;You may find that you need to perform some navigation where  the convenience functions have not yet been written.&amp;nbsp; When you encounter this  situation, you can either write a convenience function locally that follows the  same pattern, or you can simply use the &lt;b&gt;getPartByRelationshipType&lt;/b&gt; or &lt;b&gt;getPartsByRelationshipType&lt;/b&gt;  methods.&lt;/p&gt;</description></item><item><title>Wiki Page: Open XML and JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/open-xml-and-javascript.aspx</link><pubDate>Tue, 11 Jun 2013 14:38:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:19</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;This page contains a summary of all content about using Open XML from JavaScript.&lt;/p&gt;  &lt;table cellpadding="0" cellspacing="0" border="1" style="border-collapse:collapse;border:none;"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/08/02/working-with-open-xml-documents-using-javascript.aspx"&gt;Screen-cast: Working with Open XML using JavaScript&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast shows a small proof-of-concept example that uses JavaScript to open, modify, and save an Open XML document.  The screen-cast introduces some small Flash modules that enable uploading a file from the local file system into JavaScript data, and saving an Open XML document from JavaScript to the local file system.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/10/23/new-open-source-project-linq-to-xml-for-javascript.aspx"&gt;LINQ to XML for JavaScript&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Introduces LINQ to XML for JavaScript (Ltxml.js), which enables you to write much more expressive XML manipulation code, in the style of LINQ to XML for .NET&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/10/24/linq-to-xml-for-javascript-gaining-performance-through-atomization.aspx"&gt;Gaining Performance through Atomization&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Introduces XNamespace and XName atomization, and describes the implementation of atomization in Ltxml.js.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;  &lt;p&gt;[[Open XML SDK for JavaScript]]&lt;/p&gt;</description></item><item><title>Wiki Page: Overview of the Open XML SDK for JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/overview-of-the-open-xml-sdk-for-javascript.aspx</link><pubDate>Tue, 11 Jun 2013 13:14:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:27</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;[[Scenarios of the Open XML SDK for JavaScript]]&lt;/p&gt;  &lt;p&gt;[[Overview of the Open XML SDK for JavaScript API]]&lt;/p&gt;  &lt;p&gt;[[The use of LINQ to XML for JavaScript]]&lt;/p&gt;  &lt;p&gt;[[Open XML Element and Attribute Names]]&lt;/p&gt;  &lt;p&gt;[[Accessing Parts using Convenience Functions]]&lt;/p&gt;  &lt;p&gt;[[The Use of Flash and the Open XML SDK for JavaScript]]&lt;/p&gt;</description></item><item><title>Wiki Page: Introduction to the Open XML SDK for JavaScript</title><link>http://openxmldeveloper.org/wiki/w/wiki/introduction-to-the-open-xml-sdk-for-javascript.aspx</link><pubDate>Mon, 10 Jun 2013 05:32:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:26</guid><dc:creator>Eric White</dc:creator><description>&lt;p class="apiPara"&gt;The Open XML SDK for JavaScript is a light-weight JavaScript  API that enables you to create, modify, or query Open XML documents.&lt;/p&gt;  &lt;p class="apiPara"&gt;It is  useful in the following scenarios:&lt;/p&gt;  &lt;ul&gt;  &lt;li class="apiLi"&gt;Client-side Open XML applications that run in the browser&lt;/li&gt;  &lt;li class="apiLi"&gt;Server-side applications using Node.js&lt;/li&gt;  &lt;li class="apiLi"&gt;Windows 8 &amp;ldquo;Windows Store&amp;rdquo; applications&lt;/li&gt;  &lt;li class="apiLi"&gt;Apps for Office Client 2013&lt;/li&gt;  &lt;li class="apiLi"&gt;Apps for SharePoint 2013&lt;/li&gt;  &lt;/ul&gt;  &lt;p class="apiPara"&gt;You must be familiar with the Open Packaging Conventions  (OPC) in order to use the Open XML SDK for JavaScript.&amp;nbsp; If you need a refresher  on OPC, you can watch the screen-casts on OPC (#7 and #8 in the screen-cast  series &lt;a href="/wiki/w/wiki/introduction-to-open-xml.aspx"&gt;Introduction  to Open XML&lt;/a&gt;).&amp;nbsp; You may also be interested in reading the MSDN article &lt;a href="/wiki/w/wiki/add.aspx/msdn.microsoft.com/en-us/library/ee361919.aspx"&gt;Essentials of the Open  Packaging Conventions&lt;/a&gt;.&lt;/p&gt;  &lt;h2 class="apiSubHead"&gt;Table of Contents&lt;/h2&gt;  &lt;div id="oxdDocToc"&gt;      &lt;ul&gt;  &lt;li&gt;        &lt;a href="#"&gt;Guide&lt;/a&gt;          &lt;ul&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/open-xml-sdk-for-javascript-scenarios.aspx"&gt;Overview of Scenarios for the Open XML SDK for JavaScript&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/overview-of-the-api.aspx"&gt;Overview of the Open XML SDK for JavaScript API&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlsdkjs_demo.aspx"&gt;Document Generation Demo&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/linq-to-xml-for-javascript-ltxmljs.aspx"&gt;Linq to XML for JavaScript&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/pre-initialized-open-xml-element-and-attribute-tags.aspx"&gt;Pre-initialized Open XML Element and Attribute Tags&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/convenient-part-access-using-the-open-xml-sdk-for-javascript.aspx"&gt;Convenient Part Access using the Open XML SDK for JavaScript&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/wiki/w/wiki/the-use-of-flash-with-the-sdk.aspx"&gt;Use of Flash to Enable Uploading and Downloading Documents&lt;/a&gt;          &lt;/li&gt;  &lt;/ul&gt;  &lt;/li&gt;  &lt;li&gt;        &lt;a href="#"&gt;OpenXmlPackage&lt;/a&gt;          &lt;ul&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_base64.aspx"&gt;new OpenXmlPackage(base64)&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_flatopc.aspx"&gt;new OpenXmlPackage(flatOpc)&lt;/a&gt;            &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_addpart.aspx"&gt;addPart&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_addrelationship.aspx"&gt;addRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_deletepart.aspx"&gt;deletePart&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_deleterelationship.aspx"&gt;deleteRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getcontentType.aspx"&gt;getContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartbyid.aspx"&gt;getPartById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartbyrelationshiptype.aspx"&gt;getPartByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartbyuri.aspx"&gt;getPartByUri&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getparts.aspx"&gt;getParts&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartsbycontenttype.aspx"&gt;getPartsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getpartsbyrelationshiptype.aspx"&gt;getPartsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationshipbyid.aspx"&gt;getRelationshipById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationships.aspx"&gt;getRelationships&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationshipsbycontenttype.aspx"&gt;getRelationshipsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_getrelationshipsbyrelationshiptype.aspx"&gt;getRelationshipsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_savetobase64.aspx"&gt;saveToBase64&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpackage_savetoflatopc.aspx"&gt;saveToFlatOpc&lt;/a&gt;          &lt;/li&gt;  &lt;/ul&gt;  &lt;/li&gt;  &lt;li&gt;        &lt;a href="#"&gt;OpenXmlPart&lt;/a&gt;          &lt;ul&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_addrelationship.aspx"&gt;addRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_deleterelationship.aspx"&gt;deleteRelationship&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartbyid.aspx"&gt;getPartById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartbyrelationshiptype.aspx"&gt;getPartByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getparts.aspx"&gt;getParts&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartsbycontenttype.aspx"&gt;getPartsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getpartsbyrelationshiptype.aspx"&gt;getPartsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationshipbyid.aspx"&gt;getRelationshipById&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationships.aspx"&gt;getRelationships&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationshipsbycontenttype.aspx"&gt;getRelationshipsByContentType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getrelationshipsbyrelationshiptype.aspx"&gt;getRelationshipsByRelationshipType&lt;/a&gt;          &lt;/li&gt;  &lt;li&gt;            &lt;a href="/blog/b/openxmldeveloper/p/openxmlpart_getxdocument.aspx"&gt;getXDocument&lt;/a&gt;          &lt;/li&gt;  &lt;/ul&gt;  &lt;/li&gt;  &lt;/ul&gt;  &lt;/div&gt;</description></item><item><title>Wiki Page: PresentationBuilder</title><link>http://openxmldeveloper.org/wiki/w/wiki/presentationbuilder.aspx</link><pubDate>Wed, 08 May 2013 17:43:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:25</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;PresentationBuilder is a part of the PowerTools for Open XML project that enables developers to shred and combine Open XML presentations in a variety of ways.&lt;/p&gt;  &lt;p&gt;This page contains a summary of all content about PresentationBuilder.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;table style="border-collapse:collapse;border:none;" border="1" cellspacing="0" cellpadding="0"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="http://powertools.codeplex.com/releases/view/74771"&gt;Download PresentationBuilder from CodePlex.com&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Download PresentationBuilder.zip, which you can find in the Downloads tab in the project on CodePlex. The latest version is at the bottom of the page. &amp;nbsp;PresentationBuilder is also in the PowerTools Core zip file.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/08/17/new-screen-cast-short-and-sweet-intro-to-documentbuilder-2-0.aspx"&gt;Quick Introduction to PresentationBuilder&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Watch this first. Explains what PresentationBuilder is all about, and presents a short demo.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/21/all-about-presentationbuilder-part-1.aspx"&gt;All About PresentationBuilder Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Discusses the problem that PresentationBuilder solves. &amp;nbsp;Shows how to build the sample. &amp;nbsp;Explains the arguments to the constructors in detail. &amp;nbsp;Also discusses the auxiliary files that PresentationBuilder.cs needs: PtUtil.cs, PtOpenXmlUtil.cs, and PtOpenXmlDocument.cs.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/21/all-about-presentationbuilder-part-2.aspx"&gt;All about PresentationBuilder Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Shows how slides are copied, along with the correct layout, master, and theme parts. Discusses how those parts are related to each other.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/21/all-about-presentationbuilder-part-3.aspx"&gt;All About PresentationBuilder, Part 3&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Shows how PresentationBuilder covers the various parts and relationships other than slides, master slides, layouts and themes.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item><item><title>Wiki Page: Introduction to SpreadsheetML</title><link>http://openxmldeveloper.org/wiki/w/wiki/introduction-to-spreadsheetml.aspx</link><pubDate>Tue, 07 May 2013 05:47:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:24</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;This page contains links to a set of introductory screen-casts on Open XML SpreadsheetML.&lt;/p&gt;  &lt;p&gt;If you have not already done so, you may want to view the screen-casts that provide an overview of Open XML and Open Packaging Conventions:&lt;/p&gt;  &lt;table style="border:1px solid black;border-collapse:collapse;"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;[[Introduction to Open XML]]&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;  &lt;table style="border:1px solid black;border-collapse:collapse;margin-top:2em;"&gt;  &lt;caption style="font-size:large;font-weight:bold;"&gt;SpreadsheetML&lt;/caption&gt;            &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;1.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/06/26/screen-cast-introduction-to-open-xml-spreadsheetml-part-1.aspx"&gt;Cells and Styles&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Shows how to represent cell values and format those values using styles.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;2.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/07/02/screen-cast-introduction-to-open-xml-spreadsheetml-part-2.aspx"&gt;Formulas&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Shows the details of cell formulas, evaluation and the calculation chain.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;3.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/10/03/screen-cast-introduction-to-open-xml-spreadsheetml-part-3.aspx"&gt;Pivot Tables&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Shows the organization of the pivot table parts and how to make some changes to it.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;4.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/10/29/screen-cast-introduction-to-open-xml-spreadsheetml-part-4.aspx"&gt;Pivot Table Layout&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Shows details about how to change the layout of pivot tables.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;5.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/12/screen-cast-introduction-to-open-xml-spreadsheetml-part-5.aspx"&gt;Charts&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Shows details about how charts are stored in a SpreadsheetML document.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;6.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/05/31/155543.aspx"&gt;Exploring Table Markup in Open XML SpreadsheetML&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Discusses Tables in a spreadsheet.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item><item><title>Wiki Page: DocumentBuilder</title><link>http://openxmldeveloper.org/wiki/w/wiki/documentbuilder.aspx</link><pubDate>Tue, 07 May 2013 05:28:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:12</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;DocumentBuilder is a part of the PowerTools for Open XML project that enables developers to shred and combine Open XML documents in a variety of ways. DocumentBuilder 2.0, released on June 20, 2011, is a significant upgrade that increases robustness - it handles a variety of cases that the first version could not handle, including images and diagrams in headers, footers, and comments. It also handles external references correctly.&lt;/p&gt;  &lt;p&gt;Update Oct 25, 2011 - Release of DcumentBuilder 2.2 - includes bug fix for numbered items.  Version number change syncs with PowerTools for Open XML 2.2.  All of the screen-casts that refer to DocumentBuilder 2.0 are relevant to DocumentBuilder 2.2.&lt;/p&gt;  &lt;p&gt;This page contains a summary of all content about DocumentBuilder 2.2. Over the next two months, I will be writing a number of blog posts and articles about DocumentBuilder 2.0. This page will be the main place where developers can go to learn about DocumentBuilder 2.2.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;table style="border-collapse:collapse;border:none;" border="1" cellspacing="0" cellpadding="0"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="http://powertools.codeplex.com/releases/view/74771"&gt;Download DocumentBuilder 2.2 from CodePlex.com&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Download DocumentBuilder-2-2.zip, which you can find in the Downloads tab in the project on CodePlex.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/08/17/new-screen-cast-short-and-sweet-intro-to-documentbuilder-2-0.aspx"&gt;Seven minute screen-cast that introduces DocumentBuilder 2.0.&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Watch this first.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/06/20/new-version-of-documentbuilder-available-in-powertools-for-open-xml.aspx"&gt;New Version of DocumentBuilder Available in PowerTools&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Introduces DocumentBuilder 2.0&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/07/07/introduction-to-documentbuilder-2-0-screen-cast-1-of-3.aspx"&gt;Introduction to DocumentBuilder 2.0 - Screen-Cast 1 of 3&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Demonstrates downloading and running DocumentBuilder 2.0. Walks through one scenario around interrelated markup, and shows how DocumentBuilder 2.0 solves the issues around interrelated markup associated with that scenario.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/07/12/introduction-to-documentbuilder-2-0-screen-cast-2-of-3.aspx"&gt;Introduction to DocumentBuilder 2.0 - Screen-Cast 2 of 3&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Builds on the previous screen-cast - in this screen-cast, I paste an image into a comment, walk through the markup, and show how DocumentBuilder deals with this situation of interrelated markup.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/07/14/introduction-to-documentbuilder-2-0-screen-cast-3-of-3.aspx"&gt;Introduction to DocumentBuilder 2.0 - Screen-Cast 3 of 3&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;In this screen-cast, I walk through the code, show how a major portion of DocumentBuilder 2.0 is data-driven, which makes it more robust. In addition, I explain some of the finer points about how DocumentBuilder 2.0 works.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/09/23/advanced-use-of-documentbuilder-2-0.aspx"&gt;Advanced DocumentBuilder - import a document into a cell in a table, into a text box, or into a content control.&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;In this screen-cast, I show a new way to develop using DocumentBuilder 2.0.  You can use DocumentBuilder 2.0 to import a WordprocessingML document into any location that can contain block-level content (cells, text boxes, content controls).&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=qzW5c1E5GWw"&gt;Fine-grained control when importing content using DocumentBuilder.&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td valign="top" style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;"&gt;  &lt;p&gt;Here, I show how you can import little bits of content from one document into a very specific place in another document.  The specific scenario that I work through is to import the contents of a cell in a table in one document into a cell in a table in another document.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item><item><title>Wiki Page: Introduction to WordprocessingML</title><link>http://openxmldeveloper.org/wiki/w/wiki/introduction-to-wordprocessingml.aspx</link><pubDate>Mon, 06 May 2013 14:46:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:23</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;This page contains links to a set of introductory screen-casts on Open XML WordprocessingML.&lt;/p&gt;  &lt;p&gt;If you have not already done so, you may want to view the screen-casts that provide an overview of Open XML and Open Packaging Conventions:&lt;/p&gt;  &lt;table style="border:1px solid black;border-collapse:collapse;"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;[[Introduction to Open XML]]&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;  &lt;table style="border:1px solid black;border-collapse:collapse;margin-top:2em;"&gt;  &lt;caption style="font-size:large;font-weight:bold;"&gt;WordprocessingML&lt;/caption&gt;            &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;1.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/05/27/screen-cast-introduction-to-open-xml-wordprocessingml-part-1.aspx"&gt;Paragraphs, Runs, and Text&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Provides a basic introduction to WordprocessingML.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;2.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/06/12/screen-cast-introduction-to-open-xml-wordprocessingml-part-2-styles-and-sections.aspx"&gt;Styles and Sections&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Introduces styles and sections. It demonstrates the nature of inheritance in styles, and shows a couple of key points about section markup.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;3.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/06/22/screen-cast-introduction-to-open-xml-wordprocessingml-part-3-annotations.aspx"&gt;Annotations&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Introduces annotations, including comments, bookmarks, proofing errors, range permissions, and revision tracking. It contains some key points about best practices for dealing with each of these.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;4.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/19/screen-cast-images-in-wordprocessingml.aspx"&gt;Images&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Discusses images in WordprocessingML.  It shows how you can resize an image in either the horizontal or vertical direction.  It also shows how you can control the space taken up by the image.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;5.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/04/01/screen-cast-wordprocessingml-tables-part-1.aspx"&gt;Tables&lt;br /&gt;Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Discusses tables in WordprocessingML.  It examines the structure of tables, and notes how WordprocessingML tables differ from HTML tables.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;6.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/04/02/screen-cast-wordprocessingml-tables-part-2.aspx"&gt;Tables&lt;br /&gt;Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Continues the discussion of tables in WordprocessingML.  It examines table rendering in detail.  In particular, it discusses the w:tblLook and w:cnfStyle elements, and how they are related.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;7.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/11/18/screen-cast-sections-headers-and-footers.aspx"&gt;Sections, Headers, and Footers&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;When generating documents, you sometimes will want to create documents with multiple sections, so that you can control page layout separately for each section.  In addition, you sometimes will want to create headers and footers for each section.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;8.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/05/04/145745.aspx"&gt;Margins&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Explains the markup for various ways of setting margins - for cells, paragraphs, and sections.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;9.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/12/24/first-in-2-part-screen-cast-series-on-controlling-vertical-spacing-in-wordprocessingml.aspx"&gt;Vertical Spacing&lt;br /&gt;Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;When generating word-processing documents, you sometimes want to control vertical spacing very explicitly.  You may want to control how much space there is between lines in a paragraph, and how much space there is between paragraphs.  This screen-cast shows how to control spacing between lines in a paragraph.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;10.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/12/29/second-in-2-part-screen-cast-series-on-controlling-vertical-spacing-in-wordprocessingml.aspx"&gt;Vertical Spacing&lt;br /&gt;Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;This screen-cast shows how to control spacing between paragraphs.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;11.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/08/08/exploring-tables-of-contents-in-open-xml-wordprocessingml-documents.aspx"&gt;Tables-of-Contents&lt;br /&gt;Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;TOC&amp;#39;s in Open XML are not hard, but they require a bit of explanation.  This screen-cast discussed the  element in the settings part, and showed Word&amp;#39;s behavior when that field is set.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;12.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/08/10/exploring-tables-of-contents-in-open-xml-wordprocessingml-documents-part-2.aspx"&gt;Tables-of-Contents&lt;br /&gt;Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Discuss a bit more about the markup, and then walks through some example code that is part of the PowerTools for Open XML project.  Shows how to insert a TOC at a desired point in a document, and then set the  element.  Then, when the user next opens that document, Word will present them with the option to repaginate and update the TOC.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;13.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/04/25/143067.aspx"&gt;Fields and Hyperlinks&lt;br /&gt;Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;WordprocessingML fields are an important construct of Open XML markup. Hyperlinks, the TOC, dates, computed values, page references, and much more are represented by fields.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;14.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/04/27/143766.aspx"&gt;Fields and Hyperlinks&lt;br /&gt;Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Explains how to use a MarkupSimplifier utility program to make field markup more understandable. Walks through two cases where fields can be embedded in other fields.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;15.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/05/06/screen-cast-starting-chapters-on-odd-pages-in-wordprocessingml.aspx"&gt;Starting Chapters on Odd Pages in WordprocessingML&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;Shows how to set up section breaks so that each section starts on an odd-numbered page.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item><item><title>Wiki Page: Recursive Pure Functional Transforms of XML</title><link>http://openxmldeveloper.org/wiki/w/wiki/recursive-pure-functional-transforms-of-xml.aspx</link><pubDate>Mon, 29 Apr 2013 14:52:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:20</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;This page contains links to all of the screen-casts in the screen-cast series on Recursive Pure Functional Transforms.&lt;/p&gt;  &lt;p&gt;Many developers may already be familiar with certain aspects of functional programming. If you are one of those developers, feel free to skip those screen-casts that cover material that you already know, and continue watching at the point in this screen-cast series where you are not familiar with the content. &amp;nbsp;This screen-cast series is oriented towards a typical object-oriented developer who has not had exposure to functional programming. &amp;nbsp;The goal is to go from OO all the way through to writing recursive pure functional transformations, so it is necessary to cover such topics as lambda expressions, closures, and extension methods.&lt;/p&gt;  &lt;p&gt;Also, two of the screen-casts in this series cover the semantics of XML in depth. &amp;nbsp;If you are an XML expert, you can skip the screen-casts on XML.  However, if you are not absolutely clear on namespaces, syntax for namespaces, default namespace semantics, data-centric vs. document-centric XML, mixed content, and the XML infoset, you may want to view the screen-casts on XML.&lt;/p&gt;  &lt;table cellpadding="0" cellspacing="0" border="1" style="border-collapse:collapse;border:none;"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;1.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;[[Introduction to Recursive Pure Functional Transforms]]&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast introduces the series, and demos some concrete examples of recursive pure functional transforms. &amp;nbsp;Watch this first.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;2.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/10/31/screen-cast-primary-usage-scenarios-part-1-for-recursive-pure-functional-transformations.aspx"&gt;Primary Usage Scenarios (Part 1)&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses the primary scenarios for Recursive Pure Functional Transformations. It demonstrates some rudimentary transforms, and shows a few of the &amp;#39;transformation operators&amp;#39; that you will use in a pure functional transformation.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;3.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/02/screen-cast-primary-usage-scenarios-part-2-for-recursive-pure-functional-transformations.aspx"&gt;Primary Usage Scenarios (Part 2)&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast continues with demonstrating some rudimentary transforms, and shows more of the &amp;#39;transformation operators&amp;#39; that you will use in a pure functional transformation.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;4.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/05/screen-cast-lambda-expressions.aspx"&gt;Lambda Expressions&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers lambda expressions, which are a necessary language feature to know in order to write recursive pure functional transformations.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;5.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/07/screen-cast-closures.aspx"&gt;Closures&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers closures, which is another necessary language feature to know in order to write recursive pure functional transformations.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;6.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/09/screen-cast-laziness-and-eagerness.aspx"&gt;Laziness and Eagerness&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers the idea of laziness, and its opposite, eagerness.  It is necessary for you to understand these concepts in order to write transformations that perform well.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;7.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/15/screen-cast-extension-methods.aspx"&gt;Extension Methods&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers extension methods.  Extension methods enable us to write queries in a more natural fashion.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;8.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/18/screen-cast-functional-purity.aspx"&gt;Functional Purity&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers functional purity.  Functional purity is a must in order to write reliable, robust, debuggable, readable, and understandable functional transformations.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;9.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/11/21/screen-cast-xml-part-one.aspx"&gt;XML - Part One of Two&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast and the next screen-cast discuss the semantics of XML in detail. In order to discuss recursive pure functional transformations, it is necessary to understand the semantics of XML in depth. This screen-cast and the next one cover XML to the depths necessary to understand the markup in Open XML documents, and to understand writing recursive pure functional transformations of XML.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;10.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/12/03/screen-cast-xml-part-two.aspx"&gt;XML - Part Two of Two&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses document-centric vs. data-centric XML, covers all XML nodes, and then covers the XML infoset.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;11.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/12/05/screen-cast-linq-to-xml-functional-construction.aspx"&gt;LINQ to XML Functional Construction&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers some of the more interesting and important semantics of the XElement constructor, including the ability to pass nested collections, and the ability to pass null as an argument, either directly to the constructor or as an item in a collection.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;12.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/12/13/screen-cast-linq-to-xml-namespaces-and-names.aspx"&gt;LINQ to XML Namespaces and Names&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers the details around controlling namespaces and names in LINQ to XML.  In addition to explaining the mechanics of using the XNamespace and XName classes, it also covers controlling of serialization, and the differences between the .NET implementation of LINQ to XML and the JavaScript implementation of LINQ to XML (Ltxml.js).&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;13.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/02/screen-cast-linq-to-xml-axis-methods.aspx"&gt;LINQ to XML Axis Methods&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast covers some interesting semantics around axis methods in LINQ to XML.  It covers important performance implications, including the performance issues around querying in reverse document order.  It also covers the interesting idioms around extension methods.  We&amp;#39;ll be making use of those idioms in recursive pure functional transforms of XML.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;14.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/17/screen-cast-recursive-pure-functional-transformations-the-identity-transform.aspx"&gt;The Identity Transform&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast introduces Recursive Pure Functional Transformations (RPFT) of XML, and then discusses the Identity Transform.  We must know how to transform an XML tree into an identical XML tree using RPFT before we can start to morph and transform the tree in interesting ways.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;15.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/01/28/screen-cast-replacing-elements-in-recursive-pure-functional-transforms-rpft-of-xml.aspx"&gt;Replacing Elements&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses &amp;#39;replacing&amp;#39; an element from the source XML tree with a new element in the newly cloned XML tree.  To demonstrate this scenario, we write a simple transform of Open XML WordprocessingML into HTML using just a few lines of code.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;16.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/02/04/screen-cast-removing-elements-in-recursive-pure-functional-transforms-rpft-of-xml.aspx"&gt;Removing Elements&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses &amp;#39;removing&amp;#39; an element from the source XML tree when cloning the XML tree.  To demonstrate this scenario, I write code that removes proofing errors and comments from a WordprocessingML document.  This screen-cast shows taking advantage of the semantics of LINQ to XML where you can pass null as content to the XElement constructor.  Null is simply ignored when passed as content.  By transforming an element from the source tree to null, it is effectively removed from the newly cloned XML tree.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;17.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/02/15/screen-cast-transforming-attributes-in-recursive-pure-functional-transformations-rpft-of-xml.aspx"&gt;Transforming Attributes&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses transforming attributes in an XML tree.  To demonstrate this scenario, I write code that removes the RSID attributes from a WordprocessingML document.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;18.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/02/28/screen-cast-why-do-transform-methods-return-object.aspx"&gt;Why Do Transform Methods Return Object?&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses why transform methods return object instead of XElement, XNode, or XObject.  To demonstrate why, I write code that transforms a single content control into three paragraphs.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;19.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/03/28/screen-cast-complex-transforms-of-xml-elements.aspx"&gt;Complex Transforms of XML Elements&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;This screen-cast discusses an idiom / pattern that is useful when writing more complex transforms of an XML element.  To demonstrate the idiom, I write code that conditionally sets the paragraph and character style for specific content in a document.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;20.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/04/29/screen-cast-writing-a-custom-axis-method.aspx"&gt;Writing a Custom Axis Method&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Sometimes the easiest way to accomplish a particular task is to write an axis method that returns just the elements in an Open XML document that you are interested in.  Sometimes you want to write the axis method in a lazy fashion so that it performs as well as possible on large documents.  You also may need to use some form or another of recursion as the easiest way to write your axis method.  However, recursion and laziness are at odds.  You can&amp;#39;t write a method that uses &amp;#39;yield return&amp;#39; in some places (to implement laziness) and uses &amp;#39;return&amp;#39; in other places to implement recursion.  This screen-cast shows how to get around this limitation in the C# language.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item><item><title>Wiki Page: Introduction to Open XML</title><link>http://openxmldeveloper.org/wiki/w/wiki/introduction-to-open-xml.aspx</link><pubDate>Wed, 03 Apr 2013 13:53:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:22</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;This page contains links to a set of introductory screen-casts on Open XML.  It contains screen-casts on Open XML in general.&lt;/p&gt;  &lt;p&gt;After watching the screen-casts in this series, dive deeper by viewing the screen-casts in the following series:&lt;/p&gt;  &lt;table style="border:1px solid black;border-collapse:collapse;"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;[[Introduction to WordprocessingML]]&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;[[Introduction to SpreadsheetML]]&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;  &lt;table style="border:1px solid black;border-collapse:collapse;margin-top:16px;"&gt;  &lt;caption style="font-size:large;font-weight:bold;"&gt;Open XML at a high level&lt;/caption&gt;            &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;1.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/10/13/getting-started-with-open-xml-development.aspx"&gt;Getting Started with Open XML Development&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;The first in a series of screen-casts for developers getting started in development with Open XML for the first time. In this video, I look at the Open XML standard from a high level. I discuss the resources that helped me get started, and point you to places to find additional resources.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;2.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/10/24/getting-started-with-open-xml-development-part-ii-tools.aspx"&gt;Tools&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;In this screen-cast, I introduce the three most important tools that you will want to be familiar with:&lt;/p&gt;  &lt;ul&gt;  &lt;li&gt;Open XML Package Editor Power Tool for Visual Studio&lt;/li&gt;  &lt;li&gt;Open XML SDK 2.0 Productivity Tool&lt;/li&gt;  &lt;li&gt;PowerTools for Open XML&lt;/li&gt;  &lt;/ul&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;3.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/02/10/getting-started-with-open-xml-development-part-iii-wordprocessingml-scenarios.aspx"&gt;WordprocessingML Scenarios&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;In this screen-cast I discuss the three most common scenarios around WordprocessingML:&lt;/p&gt;  &lt;ul&gt;  &lt;li&gt;Document generation&lt;/li&gt;  &lt;li&gt;Data and content extraction&lt;/li&gt;  &lt;li&gt;Document transformation&lt;/li&gt;  &lt;/ul&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;4.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/02/22/getting-started-with-open-xml-development-part-iv-spreadsheetml-and-presentationml-scenarios.aspx"&gt;SpreadsheetML and PresentationML Scenarios&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;In this screen-cast I discuss the two most common scenarios around SpreadsheetML, which are a) Spreadsheet generation, and b) data extraction.&amp;nbsp; In addition, I discuss the most common scenario for PresentationML, which is presentation generation.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;5.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/02/27/getting-started-with-open-xml-development-part-v-developer-techniques.aspx"&gt;Developer Techniques&lt;br /&gt;Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;In this screen-cast I discuss some of the most powerful techniques and approaches for implementing Open XML applications.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;6.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/03/01/getting-started-with-open-xml-development-part-vi-developer-techniques-continued.aspx"&gt;Developer Techniques&lt;br /&gt;Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;In this screen-cast I continue discussing some of the most powerful techniques and approaches for implementing Open XML applications.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;7.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/05/10/screen-cast-overview-of-the-open-packaging-conventions.aspx"&gt;Overview of the Open Packaging Conventions&lt;br /&gt;Part 1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;In this screen-cast, I introduce Open Packaging Conventions (OPC) and cover some of the basic information that you need to know.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;8.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/05/15/screen-cast-overview-of-the-open-packaging-conventions-part-2.aspx"&gt;Overview of the Open Packaging Conventions&lt;br /&gt;Part 2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;This screen-cast builds on the previous screen-cast, covering relationship types, relationship ids, internal/external relationships, explicit/implicit relationships, and more. These two videos on the Open Packaging Conventions cover what you need to know to do Open XML development.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;9.&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2013/02/20/screen-cast-exploring-the-structure-of-embedded-spreadsheets-in-word-documents.aspx"&gt;Directly Manipulating Open XML Documents&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:1px solid black;padding:0em .7em;"&gt;  &lt;p&gt;You can use basic tools such as Windows Explorer and XML editors to examine and modify Open XML documents.  Even if you use such power tools as the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/450a00e3-5a7d-4776-be2c-8aa8cec2a75b"&gt;Open XML Package Editor Power Tool for Visual Studio 2010&lt;/a&gt;, you should know how the basic mechanisms of Open XML documents work.  To demonstrate how to use basic tools to examine and modify documents, this screen-cast explores the structure of embedded spreadsheets in word-processing documents.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item><item><title>Wiki Page: Introduction to Recursive Pure Functional Transforms</title><link>http://openxmldeveloper.org/wiki/w/wiki/introduction-to-recursive-pure-functional-transforms.aspx</link><pubDate>Fri, 18 Jan 2013 16:01:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:21</guid><dc:creator>Eric White</dc:creator><description>&lt;p&gt;This screen-cast introduces this series, and sets the stage for learning about how to write recursive pure functional transforms.&lt;/p&gt;  &lt;p&gt;&lt;span style="float:right;width:57%;margin:0 0 6px 8px;border:1px black solid;padding:8px 5px 5px 8px;"&gt;&lt;a href="/wiki/w/wiki/recursive-pure-functional-transforms-of-xml.aspx"&gt;Return to the Table of Contents&lt;/a&gt; of this screen-cast series. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;(Please visit the site to view this video)&lt;/p&gt;</description></item><item><title>Wiki Page: PowerTools for Open XML</title><link>http://openxmldeveloper.org/wiki/w/wiki/powertools-for-open-xml.aspx</link><pubDate>Tue, 31 Jan 2012 15:59:00 GMT</pubDate><guid isPermaLink="false">1ff61f26-0981-41c7-ad52-ff725e9b1da8:13</guid><dc:creator>bobm</dc:creator><description>&lt;p&gt;PowerTools for Open XML consists of example code and guidance for implementing various types of functionality using the Open XML document format.  At one level, PowerTools for Open XML consists of PowerShell cmdlets that enable you to process Open XML documents in interesting ways.  At a deeper level, PowerTools provides C# source code that shows how to implement some interesting functionality using Open XML.&lt;/p&gt;  &lt;p&gt;This page is the central repository for all PowerTools for Open XML content.  Subscribe to the &lt;a href="/rss.aspx"&gt;OpenXMLDeveloper RSS feed&lt;/a&gt;, follow OpenXmlDev, and EricWhiteDev on twitter, and subscribe to &lt;a href="http://ericwhite.com/blog/feed/"&gt;http://ericwhite.com/blog/feed/&lt;/a&gt; to stay current with PowerTools progress.&lt;/p&gt;  &lt;p&gt;PowerTools for Open XML was first released in June, 2008.  Some of the content listed below applies to version 1.0 or 1.0 of PowerTools for Open XML.  That content is still relevant to PowerTools for Open XML 2.0, so you may find it interesting to review that material.  Our goal is to update all of those blog posts and screen-casts, so that all material is specifically relevant to PowerTools for Open XML 2.2 (and beyond).  As those old blog posts are rewritten, we will post that content here on OpenXMLDeveloper.org, and will update the links below appropriately.&lt;/p&gt;  &lt;h1&gt;PowerTools for Open XML 2.2&lt;/h1&gt;  &lt;table style="border-collapse:collapse;border:none;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2011/10/11/announcing-the-release-of-powertools-for-open-xml-2-2.aspx"&gt;Announcing the release of PowerTools for Open XML 2.2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Highlights the key enhancements of PowerTools for Open XML version 2.2.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="http://powertools.codeplex.com"&gt;PowerTools.CodePlex.com&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Download the PowerTools for Open XML 2.2.1 source code from CodePlex. The new version includes a spreadsheet pivot table example.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=zU0utt3uga4"&gt;Screen-cast: Building, installing, and running PowerTools for Open XML 2.2&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Short screen-cast that shows how to build and install PowerTools 2.2. Shows running a cmdlet to verify that the installation worked properly.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;[[PowerTools for Open XML 2.0 Cmdlets]]&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;List of PowerTools for Open XML 2.2 cmdlets, with a short description of each one.  Several of the cmdlets now have screen-casts recorded for them, so this is a good place to find out more about all of the cmdlets.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a title="PowerTools 2.2 Code Design and Organization" href="/blog/b/openxmldeveloper/archive/2011/10/31/powertools-2-2-code-design-and-organization.aspx"&gt;PowerTools 2.2 Code Design and Organization&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Shows technical overview of the new code for PowerTools 2.2 cmdlets and core code.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a title="Screen-Cast: Functional Programming Utility Methods and Classes for Open XML" href="/blog/b/openxmldeveloper/archive/2011/11/16/screen-cast-functional-programming-utility-methods-and-classes-for-open-xml.aspx"&gt;Screen-Cast: Functional Programming Utility Methods and Classes for Open XML&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Screen-cast that walks through the functions and classes in PtUtil.cs, which contains utility functionality that make it easier to work with Open XML using LINQ to XML.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/01/24/creating-pivot-tables-part-2.aspx"&gt;Screen-Cast Creating Excel Pivot Tables&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;Screen-cast shows how to use the PowerTools methods to create pivot tables for Excel.&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;&lt;a href="/blog/b/openxmldeveloper/archive/2012/01/31/creating-pivot-tables-part-3.aspx"&gt;Screen-Cast Open XML Code to Create Pivot Tables&lt;/a&gt;&lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;Screen-cast shows the Open XML code and elements needed to create a pivot table from scratch for Excel.&lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;  &lt;h1&gt;DocumentBuilder 2.0&lt;/h1&gt;  &lt;p&gt;DocumentBuilder 2.0 is a very important part of PowerTools for Open XML, and has its own resource center:&lt;/p&gt;  &lt;p&gt;&lt;a href="/wiki/w/wiki/documentbuilder.aspx"&gt;DocumentBuilder Resource Center&lt;/a&gt;&lt;/p&gt;  &lt;h1&gt;PowerTools for Open XML 1.1&lt;/h1&gt;  &lt;table style="border-collapse:collapse;border:none;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/ericwhite/archive/2009/03/19/announcing-the-release-of-powertools-for-open-xml-v1-1.aspx"&gt;Announcing the Release of PowerTools for Open XML V1.1&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;An introduction to PowerTools for Open XML 1.1.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/ericwhite/archive/2009/02/05/move-insert-delete-paragraphs-in-word-processing-documents-using-the-open-xml-sdk.aspx"&gt;Move/Insert/Delete Paragraphs in Word Processing Documents using the Open XML SDK&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Provides a detailed explanation of DocumentBuilder 1.1.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/ericwhite/archive/2009/12/21/accepting-revisions-in-open-xml-wordprocessingml-documents.aspx"&gt;Accepting Revisions in Open XML WordprocessingML Documents&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;Discusses the RevisionAccepter class.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h1&gt;PowerTools for Open XML 1.0&lt;/h1&gt;  &lt;table style="border-collapse:collapse;border:none;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Link&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;font-weight:bold;" valign="top"&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/ericwhite/archive/2008/06/11/processing-open-xml-documents-server-side-using-powershell.aspx"&gt;Automated Processing of Open XML Documents using PowerShell&lt;/a&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td style="border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt;" valign="top"&gt;  &lt;p&gt;An introduction to PowerTools for Open XML 1.0.&lt;/p&gt;  &lt;/td&gt;  &lt;/tr&gt;  &lt;/tbody&gt;  &lt;/table&gt;</description></item></channel></rss>