XmlReaders是否返回XML声明?

时间:2015-03-17 20:33:22

标签: 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.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查询中唯一能回到的就是根节点和它的子节点。

1 个答案:

答案 0 :(得分:0)

Limitations of the xml Data Type

  

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

XML Data Type and Columns (SQL Server)

  

数据存储在内部表示中,用于保留数据的XML内容。此内部表示包括有关包含层次结构,文档顺序以及元素和属性值的信息。具体而言,保留XML数据的InfoSet内容。有关InfoSet的更多信息,请访问http://www.w3.org/TR/xml-infoset。 InfoSet内容可能不是文本XML的相同副本,因为不保留以下信息:无关紧要的空格,属性顺序,名称空间前缀和XML声明。

相关问题