diff --git a/src/FSharp.Data.Xml.Core/XmlRuntime.fs b/src/FSharp.Data.Xml.Core/XmlRuntime.fs index 23c76ff7c..fe1005b95 100644 --- a/src/FSharp.Data.Xml.Core/XmlRuntime.fs +++ b/src/FSharp.Data.Xml.Core/XmlRuntime.fs @@ -6,6 +6,7 @@ namespace FSharp.Data.Runtime.BaseTypes open System.ComponentModel open System.IO +open System.Xml open System.Xml.Linq #nowarn "10001" @@ -56,7 +57,12 @@ type XmlElement = IsError = false)>] static member Create(reader: TextReader) = use reader = reader - let element = XDocument.Load(reader, LoadOptions.PreserveWhitespace).Root + + let settings = + XmlReaderSettings(DtdProcessing = DtdProcessing.Parse) + + use xmlReader = XmlReader.Create(reader, settings) + let element = XDocument.Load(xmlReader, LoadOptions.PreserveWhitespace).Root { XElement = element } /// @@ -69,12 +75,21 @@ type XmlElement = use reader = reader let text = reader.ReadToEnd() + let settings = + XmlReaderSettings(DtdProcessing = DtdProcessing.Parse) + try - XDocument.Parse(text, LoadOptions.PreserveWhitespace).Root.Elements() + use stringReader = new StringReader(text) + use xmlReader = XmlReader.Create(stringReader, settings) + + XDocument.Load(xmlReader, LoadOptions.PreserveWhitespace).Root.Elements() |> Seq.map (fun value -> { XElement = value }) |> Seq.toArray with _ when text.TrimStart().StartsWith "<" -> - XDocument.Parse("" + text + "", LoadOptions.PreserveWhitespace).Root.Elements() + use stringReader = new StringReader("" + text + "") + use xmlReader = XmlReader.Create(stringReader, settings) + + XDocument.Load(xmlReader, LoadOptions.PreserveWhitespace).Root.Elements() |> Seq.map (fun value -> { XElement = value }) |> Seq.toArray