diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 8f702330..64bdf4d9 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -994,7 +994,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartDocument(); xtw.WriteStartElement("mame"); - xtw.WriteAttributeString("build", Header.Name); + xtw.WriteRequiredAttributeString("build", Header.Name); xtw.WriteOptionalAttributeString("debug", Header.Debug.FromYesNo()); xtw.WriteOptionalAttributeString("mameconfig", Header.MameConfig); @@ -1024,7 +1024,7 @@ namespace SabreTools.Library.DatFiles // Build the state xtw.WriteStartElement("machine"); - xtw.WriteAttributeString("name", datItem.Machine.Name); + xtw.WriteRequiredAttributeString("name", datItem.Machine.Name); xtw.WriteOptionalAttributeString("sourcefile", datItem.Machine.SourceFile); if (datItem.Machine.MachineType.HasFlag(MachineType.Bios)) @@ -1064,8 +1064,8 @@ namespace SabreTools.Library.DatFiles foreach (ListXmlInfo kvp in datItem.Machine.Infos) { xtw.WriteStartElement("info"); - xtw.WriteAttributeString("name", kvp.Name); - xtw.WriteAttributeString("value", kvp.Value); + xtw.WriteRequiredAttributeString("name", kvp.Name); + xtw.WriteRequiredAttributeString("value", kvp.Value); xtw.WriteEndElement(); } } @@ -1128,7 +1128,7 @@ namespace SabreTools.Library.DatFiles case ItemType.BiosSet: var biosSet = datItem as BiosSet; xtw.WriteStartElement("biosset"); - xtw.WriteAttributeString("name", biosSet.Name); + xtw.WriteRequiredAttributeString("name", biosSet.Name); xtw.WriteOptionalAttributeString("description", biosSet.Description); xtw.WriteOptionalAttributeString("default", biosSet.Default?.ToString().ToLowerInvariant()); xtw.WriteEndElement(); @@ -1137,7 +1137,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Disk: var disk = datItem as Disk; xtw.WriteStartElement("disk"); - xtw.WriteAttributeString("name", disk.Name); + xtw.WriteRequiredAttributeString("name", disk.Name); xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant()); #if NET_FRAMEWORK xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant()); @@ -1158,7 +1158,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Rom: var rom = datItem as Rom; xtw.WriteStartElement("rom"); - xtw.WriteAttributeString("name", rom.Name); + xtw.WriteRequiredAttributeString("name", rom.Name); if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString()); xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant()); @@ -1180,7 +1180,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Sample: xtw.WriteStartElement("sample"); - xtw.WriteAttributeString("name", datItem.Name); + xtw.WriteRequiredAttributeString("name", datItem.Name); xtw.WriteEndElement(); break; } diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index fb18c0f3..89fe30f3 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -766,13 +766,13 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("header"); - xtw.WriteFullElementString("name", Header.Name); - xtw.WriteFullElementString("description", Header.Description); + xtw.WriteRequiredElementString("name", Header.Name); + xtw.WriteRequiredElementString("description", Header.Description); xtw.WriteOptionalElementString("rootdir", Header.RootDir); xtw.WriteOptionalElementString("category", Header.Category); - xtw.WriteFullElementString("version", Header.Version); + xtw.WriteRequiredElementString("version", Header.Version); xtw.WriteOptionalElementString("date", Header.Date); - xtw.WriteFullElementString("author", Header.Author); + xtw.WriteRequiredElementString("author", Header.Author); xtw.WriteOptionalElementString("email", Header.Email); xtw.WriteOptionalElementString("homepage", Header.Homepage); xtw.WriteOptionalElementString("url", Header.Url); @@ -912,7 +912,7 @@ namespace SabreTools.Library.DatFiles // Build the state xtw.WriteStartElement(_deprecated ? "game" : "machine"); - xtw.WriteAttributeString("name", datItem.Machine.Name); + xtw.WriteRequiredAttributeString("name", datItem.Machine.Name); if (datItem.Machine.MachineType.HasFlag(MachineType.Bios)) xtw.WriteAttributeString("isbios", "yes"); @@ -1040,14 +1040,14 @@ namespace SabreTools.Library.DatFiles { case ItemType.Archive: xtw.WriteStartElement("archive"); - xtw.WriteAttributeString("name", datItem.Name); + xtw.WriteRequiredAttributeString("name", datItem.Name); xtw.WriteEndElement(); break; case ItemType.BiosSet: var biosSet = datItem as BiosSet; xtw.WriteStartElement("biosset"); - xtw.WriteAttributeString("name", biosSet.Name); + xtw.WriteRequiredAttributeString("name", biosSet.Name); xtw.WriteOptionalAttributeString("description", biosSet.Description); xtw.WriteOptionalAttributeString("default", biosSet.Default.FromYesNo()); xtw.WriteEndElement(); @@ -1056,7 +1056,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Disk: var disk = datItem as Disk; xtw.WriteStartElement("disk"); - xtw.WriteAttributeString("name", disk.Name); + xtw.WriteRequiredAttributeString("name", disk.Name); xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant()); #if NET_FRAMEWORK xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant()); @@ -1072,7 +1072,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Release: var release = datItem as Release; xtw.WriteStartElement("release"); - xtw.WriteAttributeString("name", release.Name); + xtw.WriteRequiredAttributeString("name", release.Name); xtw.WriteOptionalAttributeString("region", release.Region); xtw.WriteOptionalAttributeString("language", release.Language); xtw.WriteOptionalAttributeString("date", release.Date); @@ -1083,7 +1083,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Rom: var rom = datItem as Rom; xtw.WriteStartElement("rom"); - xtw.WriteAttributeString("name", rom.Name); + xtw.WriteRequiredAttributeString("name", rom.Name); if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString()); xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant()); @@ -1102,7 +1102,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Sample: xtw.WriteStartElement("sample"); - xtw.WriteAttributeString("name", datItem.Name); + xtw.WriteRequiredAttributeString("name", datItem.Name); xtw.WriteEndElement(); break; } diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index 207b2afa..0f564b2d 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -773,11 +773,11 @@ namespace SabreTools.Library.DatFiles xtw.WriteAttributeString("noNamespaceSchemaLocation", "xsi", "datas.xsd"); xtw.WriteStartElement("configuration"); - xtw.WriteFullElementString("datName", Header.Name); + xtw.WriteRequiredElementString("datName", Header.Name); xtw.WriteElementString("datVersion", Items.TotalCount.ToString()); - xtw.WriteFullElementString("system", Header.System); - xtw.WriteFullElementString("screenshotsWidth", Header.ScreenshotsWidth); - xtw.WriteFullElementString("screenshotsHeight", Header.ScreenshotsHeight); + xtw.WriteRequiredElementString("system", Header.System); + xtw.WriteRequiredElementString("screenshotsWidth", Header.ScreenshotsWidth); + xtw.WriteRequiredElementString("screenshotsHeight", Header.ScreenshotsHeight); if (Header.Infos != null) { @@ -810,14 +810,14 @@ namespace SabreTools.Library.DatFiles } xtw.WriteStartElement("newDat"); - xtw.WriteFullElementString("datVersionURL", Header.Url); + xtw.WriteRequiredElementString("datVersionURL", Header.Url); xtw.WriteStartElement("datUrl"); - xtw.WriteAttributeString("fileName", $"{Header.FileName}.zip"); + xtw.WriteAttributeString("fileName", $"{Header.FileName ?? string.Empty}.zip"); xtw.WriteString(Header.Url); xtw.WriteEndElement(); - xtw.WriteFullElementString("imURL", Header.Url); + xtw.WriteRequiredElementString("imURL", Header.Url); // End newDat xtw.WriteEndElement(); @@ -863,7 +863,7 @@ namespace SabreTools.Library.DatFiles // End search xtw.WriteEndElement(); - xtw.WriteFullElementString("romTitle", Header.RomTitle ?? "%u - %n"); + xtw.WriteRequiredElementString("romTitle", Header.RomTitle ?? "%u - %n"); // End configuration xtw.WriteEndElement(); @@ -903,16 +903,16 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("game"); xtw.WriteElementString("imageNumber", "1"); xtw.WriteElementString("releaseNumber", "1"); - xtw.WriteFullElementString("title", datItem.Name); + xtw.WriteRequiredElementString("title", datItem.Name); xtw.WriteElementString("saveType", "None"); if (datItem.ItemType == ItemType.Rom) { var rom = datItem as Rom; - xtw.WriteFullElementString("romSize", rom.Size.ToString()); + xtw.WriteRequiredElementString("romSize", rom.Size.ToString()); } - xtw.WriteFullElementString("publisher", datItem.Machine.Publisher); + xtw.WriteRequiredElementString("publisher", datItem.Machine.Publisher); xtw.WriteElementString("location", "0"); xtw.WriteElementString("sourceRom", "None"); xtw.WriteElementString("language", "0"); @@ -948,21 +948,21 @@ namespace SabreTools.Library.DatFiles if (!string.IsNullOrWhiteSpace(rom.CRC)) { xtw.WriteStartElement("romCRC"); - xtw.WriteAttributeString("extension", tempext); + xtw.WriteRequiredAttributeString("extension", tempext); xtw.WriteString(rom.CRC.ToUpperInvariant()); xtw.WriteEndElement(); } else if (!string.IsNullOrWhiteSpace(rom.MD5)) { xtw.WriteStartElement("romMD5"); - xtw.WriteAttributeString("extension", tempext); + xtw.WriteRequiredAttributeString("extension", tempext); xtw.WriteString(rom.MD5.ToUpperInvariant()); xtw.WriteEndElement(); } else if (!string.IsNullOrWhiteSpace(rom.SHA1)) { xtw.WriteStartElement("romSHA1"); - xtw.WriteAttributeString("extension", tempext); + xtw.WriteRequiredAttributeString("extension", tempext); xtw.WriteString(rom.SHA1.ToUpperInvariant()); xtw.WriteEndElement(); } @@ -973,8 +973,8 @@ namespace SabreTools.Library.DatFiles xtw.WriteElementString("im1CRC", "00000000"); xtw.WriteElementString("im2CRC", "00000000"); - xtw.WriteFullElementString("comment", datItem.Machine.Comment); - xtw.WriteFullElementString("duplicateID", datItem.Machine.CloneOf); + xtw.WriteRequiredElementString("comment", datItem.Machine.Comment); + xtw.WriteRequiredElementString("duplicateID", datItem.Machine.CloneOf); // End game xtw.WriteEndElement(); diff --git a/SabreTools.Library/DatFiles/OpenMSX.cs b/SabreTools.Library/DatFiles/OpenMSX.cs index 6c5e007c..dc7770f7 100644 --- a/SabreTools.Library/DatFiles/OpenMSX.cs +++ b/SabreTools.Library/DatFiles/OpenMSX.cs @@ -618,7 +618,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteDocType("softwaredb", null, "softwaredb1.dtd", null); xtw.WriteStartElement("softwaredb"); - xtw.WriteAttributeString("timestamp", Header.Date); + xtw.WriteRequiredAttributeString("timestamp", Header.Date); //TODO: Figure out how to fix the issue with removed formatting after this point // xtw.WriteComment("Credits"); @@ -660,12 +660,12 @@ namespace SabreTools.Library.DatFiles // Build the state xtw.WriteStartElement("software"); - xtw.WriteFullElementString("title", datItem.Machine.Name); - xtw.WriteFullElementString("genmsxid", datItem.Machine.GenMSXID); - xtw.WriteFullElementString("system", datItem.Machine.System); - xtw.WriteFullElementString("company", datItem.Machine.Manufacturer); - xtw.WriteFullElementString("year", datItem.Machine.Year); - xtw.WriteFullElementString("country", datItem.Machine.Country); + xtw.WriteRequiredElementString("title", datItem.Machine.Name); + xtw.WriteRequiredElementString("genmsxid", datItem.Machine.GenMSXID); + xtw.WriteRequiredElementString("system", datItem.Machine.System); + xtw.WriteRequiredElementString("company", datItem.Machine.Manufacturer); + xtw.WriteRequiredElementString("year", datItem.Machine.Year); + xtw.WriteRequiredElementString("country", datItem.Machine.Country); xtw.Flush(); } @@ -740,7 +740,7 @@ namespace SabreTools.Library.DatFiles case OpenMSXSubType.Rom: case OpenMSXSubType.NULL: xtw.WriteStartElement("rom"); - xtw.WriteFullElementString("hash", rom.SHA1.ToLowerInvariant()); + xtw.WriteRequiredElementString("hash", rom.SHA1.ToLowerInvariant()); xtw.WriteOptionalElementString("start", rom.Offset); xtw.WriteOptionalElementString("type", rom.OpenMSXType); xtw.WriteOptionalElementString("remark", rom.Remark); @@ -749,7 +749,7 @@ namespace SabreTools.Library.DatFiles case OpenMSXSubType.MegaRom: xtw.WriteStartElement("megarom"); - xtw.WriteFullElementString("hash", rom.SHA1.ToLowerInvariant()); + xtw.WriteRequiredElementString("hash", rom.SHA1.ToLowerInvariant()); xtw.WriteOptionalElementString("start", rom.Offset); xtw.WriteOptionalElementString("type", rom.OpenMSXType); xtw.WriteOptionalElementString("remark", rom.Remark); @@ -759,7 +759,7 @@ namespace SabreTools.Library.DatFiles case OpenMSXSubType.SCCPlusCart: xtw.WriteStartElement("sccpluscart"); xtw.WriteOptionalElementString("boot", rom.Boot); - xtw.WriteFullElementString("hash", rom.SHA1.ToLowerInvariant()); + xtw.WriteRequiredElementString("hash", rom.SHA1.ToLowerInvariant()); xtw.WriteOptionalElementString("remark", rom.Remark); xtw.WriteEndElement(); break; diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index cebbca8a..b2824442 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -663,13 +663,13 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("header"); - xtw.WriteFullElementString("name", Header.Name); - xtw.WriteFullElementString("description", Header.Description); + xtw.WriteRequiredElementString("name", Header.Name); + xtw.WriteRequiredElementString("description", Header.Description); xtw.WriteOptionalElementString("rootdir", Header.RootDir); xtw.WriteOptionalElementString("category", Header.Category); - xtw.WriteFullElementString("version", Header.Version); + xtw.WriteRequiredElementString("version", Header.Version); xtw.WriteOptionalElementString("date", Header.Date); - xtw.WriteFullElementString("author", Header.Author); + xtw.WriteRequiredElementString("author", Header.Author); xtw.WriteOptionalElementString("comment", Header.Comment); if (!string.IsNullOrWhiteSpace(Header.Type) || Header.ForcePacking != PackingFlag.None @@ -682,7 +682,7 @@ namespace SabreTools.Library.DatFiles { xtw.WriteStartElement("flag"); xtw.WriteAttributeString("name", "type"); - xtw.WriteAttributeString("value", Header.Type); + xtw.WriteRequiredAttributeString("value", Header.Type); xtw.WriteEndElement(); } @@ -792,8 +792,8 @@ namespace SabreTools.Library.DatFiles for (int i = (last == -1 ? 0 : last); i < newsplit.Count; i++) { xtw.WriteStartElement("directory"); - xtw.WriteAttributeString("name", newsplit[i]); - xtw.WriteAttributeString("description", newsplit[i]); + xtw.WriteRequiredAttributeString("name", newsplit[i]); + xtw.WriteRequiredAttributeString("description", newsplit[i]); } depth = depth - (last == -1 ? 0 : last) + newsplit.Count; @@ -883,7 +883,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Archive: xtw.WriteStartElement("file"); xtw.WriteAttributeString("type", "archive"); - xtw.WriteAttributeString("name", datItem.Name); + xtw.WriteRequiredAttributeString("name", datItem.Name); xtw.WriteEndElement(); break; @@ -891,7 +891,7 @@ namespace SabreTools.Library.DatFiles var biosSet = datItem as BiosSet; xtw.WriteStartElement("file"); xtw.WriteAttributeString("type", "biosset"); - xtw.WriteAttributeString("name", biosSet.Name); + xtw.WriteRequiredAttributeString("name", biosSet.Name); xtw.WriteOptionalAttributeString("description", biosSet.Description); xtw.WriteOptionalAttributeString("default", biosSet.Default.FromYesNo()); xtw.WriteEndElement(); @@ -901,7 +901,7 @@ namespace SabreTools.Library.DatFiles var disk = datItem as Disk; xtw.WriteStartElement("file"); xtw.WriteAttributeString("type", "disk"); - xtw.WriteAttributeString("name", disk.Name); + xtw.WriteRequiredAttributeString("name", disk.Name); xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant()); #if NET_FRAMEWORK xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant()); @@ -929,7 +929,7 @@ namespace SabreTools.Library.DatFiles var release = datItem as Release; xtw.WriteStartElement("file"); xtw.WriteAttributeString("type", "release"); - xtw.WriteAttributeString("name", release.Name); + xtw.WriteRequiredAttributeString("name", release.Name); xtw.WriteOptionalAttributeString("region", release.Region); xtw.WriteOptionalAttributeString("language", release.Language); xtw.WriteOptionalAttributeString("date", release.Date); @@ -941,7 +941,7 @@ namespace SabreTools.Library.DatFiles var rom = datItem as Rom; xtw.WriteStartElement("file"); xtw.WriteAttributeString("type", "rom"); - xtw.WriteAttributeString("name", rom.Name); + xtw.WriteRequiredAttributeString("name", rom.Name); if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString()); xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant()); @@ -971,7 +971,7 @@ namespace SabreTools.Library.DatFiles case ItemType.Sample: xtw.WriteStartElement("file"); xtw.WriteAttributeString("type", "sample"); - xtw.WriteAttributeString("name", datItem.Name); + xtw.WriteRequiredAttributeString("name", datItem.Name); xtw.WriteEndElement(); break; } diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index 3db0d920..7dfad60b 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -734,8 +734,8 @@ namespace SabreTools.Library.DatFiles xtw.WriteDocType("softwarelist", null, "softwarelist.dtd", null); xtw.WriteStartElement("softwarelist"); - xtw.WriteAttributeString("name", Header.Name); - xtw.WriteAttributeString("description", Header.Description); + xtw.WriteRequiredAttributeString("name", Header.Name); + xtw.WriteRequiredAttributeString("description", Header.Description); switch (Header.ForcePacking) { @@ -802,7 +802,7 @@ namespace SabreTools.Library.DatFiles // Build the state xtw.WriteStartElement("software"); - xtw.WriteAttributeString("name", datItem.Machine.Name); + xtw.WriteRequiredAttributeString("name", datItem.Machine.Name); if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); @@ -830,8 +830,8 @@ namespace SabreTools.Library.DatFiles foreach (ListXmlInfo kvp in datItem.Machine.Infos) { xtw.WriteStartElement("info"); - xtw.WriteAttributeString("name", kvp.Name); - xtw.WriteAttributeString("value", kvp.Value); + xtw.WriteRequiredAttributeString("name", kvp.Name); + xtw.WriteRequiredAttributeString("value", kvp.Value); xtw.WriteEndElement(); } } @@ -841,8 +841,8 @@ namespace SabreTools.Library.DatFiles foreach (SoftwareListSharedFeature kvp in datItem.Machine.SharedFeatures) { xtw.WriteStartElement("sharedfeat"); - xtw.WriteAttributeString("name", kvp.Name); - xtw.WriteAttributeString("value", kvp.Value); + xtw.WriteRequiredAttributeString("name", kvp.Name); + xtw.WriteRequiredAttributeString("value", kvp.Value); xtw.WriteEndElement(); } } @@ -852,16 +852,16 @@ namespace SabreTools.Library.DatFiles foreach (ListXmlDipSwitch dip in datItem.Machine.DipSwitches) { xtw.WriteStartElement("dipswitch"); - xtw.WriteAttributeString("name", dip.Name); - xtw.WriteAttributeString("tag", dip.Tag); - xtw.WriteAttributeString("mask", dip.Mask); + xtw.WriteRequiredAttributeString("name", dip.Name); + xtw.WriteRequiredAttributeString("tag", dip.Tag); + xtw.WriteRequiredAttributeString("mask", dip.Mask); foreach (ListXmlDipValue dipval in dip.Values) { xtw.WriteStartElement("dipvalue"); - xtw.WriteAttributeString("name", dipval.Name); - xtw.WriteAttributeString("value", dipval.Value); - xtw.WriteAttributeString("default", dipval.Default == true ? "yes" : "no"); + xtw.WriteRequiredAttributeString("name", dipval.Name); + xtw.WriteRequiredAttributeString("value", dipval.Value); + xtw.WriteRequiredAttributeString("default", dipval.Default == true ? "yes" : "no"); xtw.WriteEndElement(); } @@ -924,16 +924,16 @@ namespace SabreTools.Library.DatFiles // Build the state xtw.WriteStartElement("part"); - xtw.WriteAttributeString("name", datItem.PartName); - xtw.WriteAttributeString("interface", datItem.PartInterface); + xtw.WriteRequiredAttributeString("name", datItem.PartName); + xtw.WriteRequiredAttributeString("interface", datItem.PartInterface); if (datItem.Features != null && datItem.Features.Count > 0) { foreach (SoftwareListFeature kvp in datItem.Features) { xtw.WriteStartElement("feature"); - xtw.WriteAttributeString("name", kvp.Name); - xtw.WriteAttributeString("value", kvp.Value); + xtw.WriteRequiredAttributeString("name", kvp.Name); + xtw.WriteRequiredAttributeString("value", kvp.Value); xtw.WriteEndElement(); } } @@ -947,11 +947,11 @@ namespace SabreTools.Library.DatFiles areaName = "cdrom"; xtw.WriteStartElement("diskarea"); - xtw.WriteAttributeString("name", areaName); + xtw.WriteRequiredAttributeString("name", areaName); xtw.WriteOptionalAttributeString("size", disk.AreaSize.ToString()); xtw.WriteStartElement("disk"); - xtw.WriteAttributeString("name", disk.Name); + xtw.WriteRequiredAttributeString("name", disk.Name); xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant()); #if NET_FRAMEWORK xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant()); @@ -974,13 +974,13 @@ namespace SabreTools.Library.DatFiles areaName = "rom"; xtw.WriteStartElement("dataarea"); - xtw.WriteAttributeString("name", areaName); + xtw.WriteRequiredAttributeString("name", areaName); xtw.WriteOptionalAttributeString("size", rom.AreaSize.ToString()); xtw.WriteOptionalAttributeString("width", rom.AreaWidth); xtw.WriteOptionalAttributeString("endianness", rom.AreaEndianness); xtw.WriteStartElement("rom"); - xtw.WriteAttributeString("name", rom.Name); + xtw.WriteRequiredAttributeString("name", rom.Name); if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString()); xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant()); diff --git a/SabreTools.Library/IO/XmlTextWriterExtensions.cs b/SabreTools.Library/IO/XmlTextWriterExtensions.cs index cf9b4b62..7c22c383 100644 --- a/SabreTools.Library/IO/XmlTextWriterExtensions.cs +++ b/SabreTools.Library/IO/XmlTextWriterExtensions.cs @@ -7,7 +7,16 @@ namespace SabreTools.Library.IO /// public static class XmlTextWriterExtensions { - // TODO: Rename Full to Required, add one for attributes + /// + /// Write an attribute, forcing empty if null + /// + /// XmlTextWriter to write out with + /// Name of the element + /// Value to write in the element + public static void WriteRequiredAttributeString(this XmlTextWriter writer, string localName, string value) + { + writer.WriteAttributeString(localName, value ?? string.Empty); + } /// /// Force writing separate open and start tags, even for empty elements @@ -15,7 +24,7 @@ namespace SabreTools.Library.IO /// XmlTextWriter to write out with /// Name of the element /// Value to write in the element - public static void WriteFullElementString(this XmlTextWriter writer, string localName, string value) + public static void WriteRequiredElementString(this XmlTextWriter writer, string localName, string value) { writer.WriteStartElement(localName); writer.WriteRaw(value ?? string.Empty);