/// <summary> /// Persists an output in an XML format. /// </summary> /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param> internal void Write(XmlWriter writer) { writer.WriteStartElement("wixOutput", XmlNamespaceUri); writer.WriteAttributeString("type", this.Type.ToString()); if (0 != this.Codepage) { writer.WriteAttributeString("codepage", this.Codepage.ToString(CultureInfo.InvariantCulture)); } writer.WriteAttributeString("version", Output.CurrentVersion.ToString()); // Collect all the table definitions and write them. TableDefinitionCollection tableDefinitions = new TableDefinitionCollection(); foreach (Table table in this.Tables) { tableDefinitions.Add(table.Definition); } tableDefinitions.Write(writer); foreach (Table table in this.Tables.OrderBy(t => t.Name)) { table.Write(writer); } foreach (SubStorage subStorage in this.SubStorages) { subStorage.Write(writer); } writer.WriteEndElement(); }
/// <summary> /// Loads a collection of table definitions from a XmlReader in memory. /// </summary> /// <param name="reader">Reader to get data from.</param> /// <param name="tableDefinitions">Table definitions to use for strongly-typed rows.</param> /// <returns>The TableDefinitionCollection represented by the xml.</returns> internal static TableDefinitionCollection Read(XmlReader reader, TableDefinitionCollection tableDefinitions) { if ("tableDefinitions" != reader.LocalName) { throw new XmlException(); } var empty = reader.IsEmptyElement; var tableDefinitionCollection = new TableDefinitionCollection(); while (reader.MoveToNextAttribute()) { } // parse the child elements if (!empty) { var done = false; while (!done && reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: switch (reader.LocalName) { case "tableDefinition": tableDefinitionCollection.Add(TableDefinition.Read(reader, tableDefinitions)); break; default: throw new XmlException(); } break; case XmlNodeType.EndElement: done = true; break; } } if (!done) { throw new XmlException(); } } return(tableDefinitionCollection); }