2009-03-19 8 views
3

Je ne comprends pas. Je n'ai vraiment pas le ReadEndElement. Je suppose qu'après chaque ReadStartElement, vous devez fermer le lecteur à avancé à l'élément start suivant et s'il n'y a plus d'éléments start, fermez par ReadEndElement pour tous les autres éléments?'Element' est un XmlNodeType invalide

échantillon du XML retourné:

<Envelope> 
<Body> 
<RESULT> 
<SUCCESS>true</SUCCESS> 
<SESSIONID>dc302149861088513512481</SESSIONID> 
<ENCODING>dc302149861088513512481 
</ENCODING> 
</RESULT> 
</Body> 
</Envelope> 

      reader.Read(); 
      reader.ReadStartElement("Envelope"); 
      reader.ReadStartElement("Body"); 
      reader.ReadStartElement("RESULT"); 
      reader.ReadStartElement("SUCCESS"); 
      reader.ReadEndElement(); 
      reader.ReadStartElement("SESSIONID"); 
      _sessionID = reader.ReadString(); 
      reader.ReadEndElement(); 
      reader.ReadEndElement(); <-- error here 
      reader.ReadEndElement(); 
      reader.ReadEndElement(); 

Je suis ignorant l'un des éléments (CODER) retuned, parce que je ne pas besoin ... pas sûr si cela n'a rien à voir avec elle. Peut-être que je suis obligé de lire chaque élément, peu importe si je veux l'utiliser ou non.

Répondre

6

Vous devez lire chaque noeud (attribut, élément, ...) dans le document.

Si le lecteur est positionné sur un élément, vous pouvez le passer (et tous ses sous-nœuds) avec XmlReader.Skip.

+0

merci j'ai ajouté réellement dans l'élément manquant. Mais je ne peux juste pas comprendre le # de ReadEndElements dont j'ai besoin. On dirait que la dernière fois dans une autre classe j'avais besoin d'un ReadEndElement moins que le # de ReadStartElements ... presque comme si vous n'aviez pas besoin d'un ReadEndElement pour le premier ReadStartElement. – user72603

+0

Je veux dire que j'ai regardé la définition sur MSDN qui est pauvre. Parce qu'il dit que ReadStartElement et ReadEndElement vous déplacent tous deux au nœud suivant. Je suppose cependant que par le simple nom de "ReadEndElement" il scelle l'élément actuel que vous lisez. Mais encore je reçois cette erreur même si – user72603

+0

donc vous devez faire soit un lecteur.ReadString. Mais comme pour ReadEndElement, je suppose que vous devez avoir cela pour chaque ReadStartElement à sceller. – user72603

0

J'expérimente cet éreur lors d'une tentative de désérialisation à l'aide du XmlSerializer. J'ai un Xml valide qui contenait quelques balises html <br /> qui n'étaient pas codées dans mon document source.

<Event> 
    <Id>1</Id> 
    <Title>The first Sicknote with Chris Liberator</Title> 
    <Copy> 
    Sicknote - Techno vs Dubstep <br /> 
     ------------------------------------<br /> 
     <br /><br /> 
     Thursday 8th October - 11pm - 4am 
    </Copy> 
    <Date>2009-10-08T10:00:00</Date> 
    <FlierImage>1.jpg</FlierImage> 
    </Event> 
Questions connexes