2008-11-12 5 views

Répondre

8

Non testé, mais que diriez-vous via un XmlDocument:

XmlDocument doc = new XmlDocument(); 
    doc.Load(reader); 
    XmlElement el = doc.DocumentElement; 

alternative (à partir du cmoment), quelque chose comme:

doc.LoadXml(reader.ReadOuterXml()); 

Mais en réalité, je ne suis pas fan de ce .. Il force une étape xml-parse supplémentaire (une des opérations les plus coûteuses en CPU) sans raison valable. Si l'original est glitch, alors peut-être envisager un sous-lecteur:

using (XmlReader subReader = reader.ReadSubtree()) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(subReader); 
     XmlElement el = doc.DocumentElement; 
    } 
+0

changez la ligne 2 en doc.LoadXml (reader.ReadOuterXml()); donc je peux accepter. Merci. –

+1

Comment ceci répond à la question? Cela va lire tout le XML dans XmlDocument, et retournera seulement l'élément racine. –

+2

@Sunny; l'élément racine contient tous les autres éléments en tant que descendants –

2

En supposant que vous avez XmlDocument, où vous devez attacher le XmlElement nouvellement créé:

XmlElement myElement; 
myXmlReader.Read(); 
if (myXmlReader.NodeType == XmlNodeType.Element) 
{ 
    myElement = doc.CreateElement(myXmlReader.Name); 
    myElement.InnerXml = myXmlReader.InnerXml; 
} 

De l'docs: Do ne pas instancier un XmlElement directement; à la place, utilisez des méthodes telles que CreateElement.

Questions connexes