diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index fe95859fd..923c91de6 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -286,20 +286,20 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc var watched = GetExistingWatchedStatus(series, episodeFile.RelativePath); - var xmlResult = string.Empty; var xws = new XmlWriterSettings { Encoding = Encoding.UTF8, - Indent = true + Indent = true, + ConformanceLevel = ConformanceLevel.Fragment }; + using var sw = new Utf8StringWriter(); + using var xw = XmlWriter.Create(sw, xws); + + xw.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\""); + foreach (var episode in episodeFile.Episodes.Value) { - var doc = new XDocument - { - Declaration = new XDeclaration("1.0", "UTF-8", "yes") - }; - var image = episode.Images.SingleOrDefault(i => i.CoverType == MediaCoverTypes.Screenshot); var details = new XElement("episodedetails"); @@ -391,17 +391,12 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc // details.Add(new XElement("credits", tvdbEpisode.Writer.FirstOrDefault())); // details.Add(new XElement("director", tvdbEpisode.Directors.FirstOrDefault())); - using var sw = new Utf8StringWriter(); - using var xw = XmlWriter.Create(sw, xws); - - doc.Add(details); - doc.Save(xw); - xw.Flush(); - - xmlResult += sw.ToString(); - xmlResult += Environment.NewLine; + details.WriteTo(xw); } + xw.Flush(); + var xmlResult = sw.ToString(); + return new MetadataFileResult(GetEpisodeMetadataFilename(episodeFile.RelativePath), xmlResult.Trim(Environment.NewLine.ToCharArray())); }