【问题标题】:Do XmlReaders return XML Declarations?XmlReaders 是否返回 XML 声明?
【发布时间】:2023-03-13 22:10:01
【问题描述】:

我正在尝试创建一个解析 nvarchar(max) 字符串并返回 XML 的 SQLCLR 标量函数。数据总是以不带 xml 声明的 sn-p 形式返回,而不是完整的文档。相关代码是-

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 查询中返回的唯一内容是根节点及其子节点。

【问题讨论】:

    标签: c# xml xmlreader sqlclr


    【解决方案1】:

    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 声明。

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 1970-01-01
      • 2019-07-16
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多