2013-08-14 1 views
0

Le code que j'ai jusqu'à maintenant ressemble à ceci.Comment lire un élément XML complet avec ses enfants tout en obtenant des données de NetworkStream?

using (XmlReader r = XmlReader.Create(stream, new XmlReaderSettings() { Async = true })) 
{      
    while (await r.ReadAsync()) 
    { 
     switch (r.NodeType) { 
      case XmlNodeType.Element: 
       if (r.IsEmptyElement) // no attributes 
       { 
        OnReceive("<" + r.Name + " />"); 
       } 
       else // has attributes 
       { 
        OnReceive("<" + r.Name + ">"); 
        while (r.MoveToNextAttribute()) 
        { 
         OnReceive(r.Name + " -> " + r.Value); 
        } 
       }         
       break; 
     } 
    } 
} 

Mon XML ressemble à ceci.

<?xml version='1.0' encoding='UTF-8'?> 
<start> 
    <a> 
     <b></b> 
     <c> 
      <d>TEXT01</d> 
      <d>TEXT01</d> 
      <d>TEXT01</d> 
      <d>TEXT01</d> 
     </c> 
     <e> 
      <f>TEST01</f> 
     </e> 
     <g/> 
     <h/> 
    </a> 
... 

Dès que je frappe l'élément XML <a> Je voudrais lire à la fin (jusqu'à ce que je frappe </a>), puis déclencher un événement avec tout l'élément et ses enfants.

Comment faire? Y a-t-il un mécanisme en place qui me permet de lire le flux comme ça (attendre la fin d'un élément) et ensuite continuer avec d'autres parties XML?

+0

Avez-vous regardé [ReadSubtree] (http://msdn.microsoft.com/EN-US/library/55c7aswf (v = VS.110, d = hv.2) .aspx)? –

Répondre

0

Eh bien c'est probablement faisable avec ReadInnerXmlAsync.

switch (r.NodeType) { 
          case XmlNodeType.Element: 
           if (r.Name.Equals("a")) 
           { 
            string x = await r.ReadInnerXmlAsync(); 
            OnReceive(x); 
           }        
           break; 
         } 
+0

Probablement? Êtes-vous en train de dire que vous ne l'avez même pas essayé? – svick

+0

Je l'ai fait. Cependant, je rencontre d'autres problèmes qui sont décrits sur http://stackoverflow.com/questions/18231945/why-does-xmlreader-readinnerxmlasync-hang-when-reading-nselement. C'est pourquoi j'écris: "probablement". Maintenant je sais: c'est "probablement" pas le chemin à parcourir. –

Questions connexes