Erreur XML: il existe plusieurs éléments racine

Je reçois du XML d’un service Web. Voici à quoi ressemble le XML:

  Text      Text   Text    Text   etc. 

Et voici mon code C #:

 SsortingngBuilder output = new SsortingngBuilder(); // Create an XmlReader using (XmlReader reader = XmlReader.Create(new SsortingngReader(xoResponse.@return))) { XmlWriterSettings ws = new XmlWriterSettings(); //ws.Indent = true; using (XmlWriter writer = XmlWriter.Create(output, ws)) { // Parse the file and display each of the nodes. while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: writer.WriteStartElement(reader.Name); break; case XmlNodeType.Text: writer.WriteSsortingng(reader.Value); break; case XmlNodeType.XmlDeclaration: case XmlNodeType.ProcessingInstruction: writer.WriteProcessingInstruction(reader.Name, reader.Value); break; case XmlNodeType.Comment: writer.WriteComment(reader.Value); break; case XmlNodeType.EndElement: writer.WriteFullEndElement(); break; } } } } 

Je crois que l’erreur est jetée sur le deuxième élément parent. Comment puis-je éviter cette erreur? Toute aide est grandement appréciée.

Vous devez inclure vos éléments dans un élément environnant, car les documents XML ne peuvent avoir qu’un seul nœud racine:

     Text      Text   Text    Text     

Comme vous recevez ce balisage ailleurs, plutôt que de le générer vous-même, vous devrez peut-être le faire vous-même en traitant la réponse comme une chaîne et en l’enveloppant avec les balises appropriées avant d’essayer de l’parsingr en XML.

Donc, vous avez quelques choix:

  1. Demandez au fournisseur du service Web de vous renvoyer un fichier XML contenant un nœud racine
  2. Pré-traiter le XML, comme je l’ai suggéré ci-dessus, pour append un nœud racine
  3. Prétraitez le XML pour le diviser en plusieurs morceaux (c.-à-d. Un pour chaque nœud ) et traiter chacun comme un document XML distinct

Vous pouvez le faire sans modifier le stream XML: Dites au XmlReader de ne pas être aussi pointilleux. XmlReaderSettings.ConformanceLevel vous XmlReaderSettings.ConformanceLevel sur ConformanceLevel.Fragment , l’parsingur ignore le fait qu’il n’y a pas de nœud racine.

  XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; using (XmlReader reader = XmlReader.Create(tr,settings)) { ... } 

Maintenant, vous pouvez parsingr quelque chose comme ceci (qui est un stream XML en temps réel, où il est impossible d’emballer un nœud).

  1354902435238 7073822    7d1300786a0000000bf9458b0518000000000000000000000000000000000c0c030306001b    fd1260780912ff3028fea5ffc0387d640fa550f40fbdf7afffe001fff8200fff00f0bf0e000042201421100224ff40312300111400004f000000e0c0fbd1e0000f10e0fccc2ff0000f0fe00f00f0eed00f11e10d010021420401    fd126078ad11fc4015fefdf5b042ff1010223500000000000000003007ff00f20e0f01000e0000dc0f01000f000000000000004f000000f104ff001000210f000013010000c6da000000680ffa807800200000000d00c0f0  

Enveloppez le xml dans un autre élément

    Text      Text   Text    Text    

Si vous êtes responsable (ou contrôlez le service Web), demandez-leur d’append un élément racine unique!

Si vous ne pouvez pas changer cela, vous pouvez faire un peu de regex ou de fractionnement de chaîne pour parsingr chaque élément et passer chaque élément à votre XML Reader.

Vous pouvez également append manuellement un élément racine indésirable, en préfixant une balise d’ouverture et en ajoutant un suffixe à une balise de fermeture.