2015-03-17 2 views
2

J'essaie de créer une fonction scalaire SQLCLR qui analyse une chaîne nvarchar (max) et renvoie XML. Les données sont toujours renvoyées sous la forme d'un extrait sans la déclaration xml, plutôt que d'un document complet. Le code correspondant est- XmlReaders renvoie-t-il des déclarations 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)); 

Je ne peux pas déterminer si je suis abusant XmlReader ou si cela est une conséquence de l'environnement SQLCLR. La seule chose que je peux récupérer dans une requête SQL est le nœud racine et c'est les enfants.

Répondre

0

Limitations of the xml Data Type

La déclaration XML PI, par exemple, <?xml version='1.0'?>, ne sont pas conservées lors du stockage de données XML dans une instance de type de données XML. C'est par conception. La déclaration XML (<?xml ... ?>) et ses attributs (version/encodage/autonome) sont perdus après la conversion des données en type xml. La déclaration XML est traitée comme une directive pour l'analyseur XML. Les données XML sont stockées en interne sous la forme ucs-2. Tous les autres PI de l'instance XML sont conservés.

XML Data Type and Columns (SQL Server)

Les données sont stockées dans une représentation interne qui préserve le contenu XML des données. Cette représentation interne inclut des informations sur la hiérarchie de confinement, l'ordre du document et les valeurs d'élément et d'attribut. Plus précisément, le contenu InfoSet des données XML est préservé. Pour plus d'informations sur InfoSet, visitez http://www.w3.org/TR/xml-infoset. Le contenu InfoSet peut ne pas être une copie identique du texte XML, car les informations suivantes ne sont pas conservées: espaces blancs insignifiants, ordre d'attributs, préfixes d'espace de noms et déclaration XML.