C# XmlReaders是否返回XML声明?

C# XmlReaders是否返回XML声明?,c#,xml,xmlreader,sqlclr,C#,Xml,Xmlreader,Sqlclr,我试图创建一个SQLCLR标量函数,该函数解析nvarchar(max)字符串并返回XML。数据总是作为不带xml声明的片段返回,而不是作为完整文档返回。有关守则如下:- XmlDocument doc = new XmlDocument( ); XmlDeclaration xDec = doc.CreateXmlDeclaration( "1.0", "UTF-8", null ); doc.AppendChild(xDec); XmlElement rootnode = doc.Cre

我试图创建一个SQLCLR标量函数,该函数解析nvarchar(max)字符串并返回XML。数据总是作为不带xml声明的片段返回,而不是作为完整文档返回。有关守则如下:-

XmlDocument doc = new XmlDocument( );

XmlDeclaration xDec = doc.CreateXmlDeclaration( "1.0", "UTF-8", null );
doc.AppendChild(xDec);

XmlElement rootnode = doc.CreateElement("Root Node");
doc.AppendChild(rootnode);                  

... snipped ...

XmlReader xread = new XmlNodeReader(doc);

XmlReaderSettings xsetRead = new XmlReaderSettings();
xsetRead.ConformanceLevel = System.Xml.ConformanceLevel.Document;

return new SqlXml(XmlReader.Create(xread,xsetRead));
我无法确定是误用了XmlReader,还是这是SQLCLR环境的结果。在SQL查询中,我唯一能得到的是根节点及其子节点。

在XML数据类型实例中存储XML数据时,XML声明PI(例如,
)不会被保留。这是故意的。将数据转换为XML类型后,XML声明(
)及其属性(版本/编码/独立)将丢失。XML声明被视为XML解析器的指令。XML数据在内部存储为ucs-2。XML实例中的所有其他PI都将被保留

数据存储在保留数据XML内容的内部表示形式中。此内部表示包括有关包含层次结构、文档顺序以及元素和属性值的信息。具体来说,XML数据的信息集内容是保留的。有关InfoSet的更多信息,请访问。信息集内容可能不是文本XML的相同副本,因为不保留以下信息:不重要的空格、属性顺序、名称空间前缀和XML声明