2009-04-29 15 views
0

Grüße alle.Root-Element fehlt Fehler für .net XmlDocument.load()

Ich erhalte einen asp.net Fehler "Root-Element fehlt", wenn ich die Ergebnisse einer REST-Anfrage in ein XmlDocument laden. Dieselbe REST-Anfrage sieht gut aus und gibt gültige Ergebnisse zurück, wenn ich sie mit dem Firefox-Addon "RESTTEST" ausführe. Aber der Fehler zeigt sich in der C# .net Code-behind. Weiß jemand, was das verursachen könnte? Hier ist der relevante Code:

HttpWebResponse response = null; 
response = (HttpWebResponse)request.GetResponse(); 
HttpStatusCode statusCode = response.StatusCode; 
Stream responseData = response.GetResponseStream(); 
StreamReader sr = new StreamReader(responseData); 
XmlTextReader reader = new XmlTextReader(sr); 
XmlDocument doc = new XmlDocument(); 
doc.Load(sr); // here is where the error occurs. 

Mein Ziel ist es, die Ergebnisse der REST-Anforderung in ein Verfahrweg-able XML-Datenmodell zu laden, die ich dann Elemente und ihre Werte aus greifen kann.

Wenn ich diesen Code verwende, bekomme ich die erwarteten Ergebnisse. Was ist der Unterschied?

while (reader.Read()) 
{ 
    switch (reader.NodeType) 
    { 
    case XmlNodeType.Element: // The node is an Element. 
     Response.Write("Element Name: " + reader.Name); 
     while (reader.MoveToNextAttribute()) // Read attributes. 
     Response.Write(" " + reader.Name + "='" + reader.Value + "'"); 
     Response.Write("<br />"); 
     break; 
    case XmlNodeType.Text: //Display the text in each element. 
     Response.Write("Element value: " + reader.Value); 
     Response.Write("Read key=" + reader.Name + ", value=" + reader.Value + "<br/>"); 
     break; 
    case XmlNodeType.EndElement: //Display end of element. 
     Response.Write("<br />"); 
     break; 
    } 
    } 
+0

Können Sie das Xml-Objekt, das Sie von REST TEST erhalten haben, posten, damit wir das betrachten können. –

+0

Es ist wahrscheinlich, dass das XML nicht XML oder anderweitig fehlerhaft ist. Können Sie uns ein Beispiel für die Ergebnisse der REST-Anfrage geben? –

Antwort

1

Es sieht so aus, als ob der XML-Code ein Fragment und nicht ein vollständig formatiertes XML-Dokument ist - deshalb hatte er nicht die Wurzel. Damit dies funktioniert, müssen Sie das XMLDocument-Objekt so konfigurieren, dass Fragmente akzeptiert werden.

0

Versuchen sr.ReadToEnd(), um zu sehen, was Ihnen zurückgegeben wird. Es ist wahrscheinlich eine leere Zeichenfolge.

Sie sollten auch XmlReader.Create verwenden, wenn Sie .NET 2.0 oder höher verwenden; XmlTextReader ist veraltet.

Ein Beispiel, das XML-Serialisierung verwendet, finden Sie unter A REST Client Library for .NET, Part 1. (Entschuldigung, es gibt keinen Teil 2).