diff --git a/SabreTools.Helper/Objects/Dat/DatFile.cs b/SabreTools.Helper/Objects/Dat/DatFile.cs index 869234c5..447a7a3e 100644 --- a/SabreTools.Helper/Objects/Dat/DatFile.cs +++ b/SabreTools.Helper/Objects/Dat/DatFile.cs @@ -1221,6 +1221,7 @@ namespace SabreTools.Helper case OutputFormat.OfflineList: case OutputFormat.SabreDat: case OutputFormat.SoftwareList: + case OutputFormat.Xml: ParseXML(filename, sysid, srcid, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, itemStatus, trim, single, root, logger, keep, clean, softlist); break; case OutputFormat.RedumpMD5: @@ -1235,9 +1236,6 @@ namespace SabreTools.Helper case OutputFormat.RomCenter: ParseRC(filename, sysid, srcid, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, itemStatus, trim, single, root, logger, clean); break; - case OutputFormat.Xml: - ParseXMLString(filename, sysid, srcid, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, itemStatus, trim, single, root, logger, keep, clean, softlist); - break; default: return; } @@ -2241,6 +2239,19 @@ namespace SabreTools.Helper return; } + // Check if the input has invalid characters. If it does, then close the reader and use the string version + try + { + XElement x = XElement.Load(xtr, LoadOptions.None); + x = null; + } + catch + { + xtr.Dispose(); + ParseXMLString(filename, sysid, srcid, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, itemStatus, trim, single, root, logger, keep, clean, softlist); + return; + } + // Otherwise, read the file to the end try {