Ich frage einen seifenbasierten Dienst ab und möchte das zurückgegebene XML analysieren, wenn ich jedoch versuche, das XML in ein XDoc zu laden, um die Daten abzufragen. Erhalte ich die Fehlermeldung "Unzulässige Zeichen im Pfad"? Dies (unten) ist das vom Dienst zurückgegebene XML. Ich möchte einfach die Liste der Wettbewerbe abrufen und sie in eine Liste einfügen, die ich eingerichtet habe. Das XML wird jedoch in ein XML-Dokument geladen und muss daher korrekt formatiert sein.
Jeder Rat, wie man dies am besten tun und den Fehler umgehen kann, wäre sehr dankbar.
<?xml version="1.0" ?>
- <gsmrs version="2.0" sport="soccer" lang="en" last_generated="2010-08-27 20:40:05">
- <method method_id="3" name="get_competitions">
<parameter name="area_id" value="1" />
<parameter name="authorized" value="yes" />
<parameter name="lang" value="en" />
</method>
<competition competition_id="11" name="2. Bundesliga" soccertype="default" teamtype="default" display_order="20" type="club" area_id="80" last_updated="2010-08-27 19:53:14" area_name="Germany" countrycode="DEU" />
</gsmrs>
Hier ist mein Code, ich muss in der Lage sein, die Daten in einem XDoc abzufragen:
string theXml = myGSM.get_competitions("", "", 1, "en", "yes");
XmlDocument myDoc = new XmlDocument();
MyDoc.LoadXml(theXml);
XDocument xDoc = XDocument.Load(myDoc.InnerXml);
-
Charaktere? Handelt es sich um einen Kopier- / Einfügefehler oder handelt es sich um das eigentliche XML?Antworten:
Sie zeigen Ihren Quellcode nicht an, aber ich denke, was Sie tun, ist Folgendes:
string xml = ... retrieve ...; XmlDocument doc = new XmlDocument(); doc.Load(xml); // error thrown here
Die
Load
Methode erwartet einen Dateinamen, kein XML selbst. Verwenden Sie zum Laden eines tatsächlichen XML einfach die folgendeLoadXml
Methode:... same code ... doc.LoadXml(xml);
In ähnlicher Weise erwartet die Verwendung
XDocument
derLoad(string)
Methode einen Dateinamen , kein tatsächliches XML. Da es jedoch keineLoadXml
Methode gibt, lautet die korrekte Methode zum Laden des XML aus einer Zeichenfolge wie folgt:string xml = ... retrieve ...; XDocument doc; using (StringReader s = new StringReader(xml)) { doc = XDocument.Load(s); }
Tatsächlich ist es bei der Entwicklung von Dingen eine sehr gute Idee, auf die Semantik (Bedeutung) von Parametern zu achten, nicht nur auf deren Typen. Wenn der Typ eines Parameters a ist
string
, bedeutet dies nicht, dass man nur alles eingeben kann, was eine Zeichenfolge ist.Auch in Bezug auf Ihre Frage aktualisiert, es macht keinen Sinn , zu verwenden
XmlDocument
undXDocument
zugleich. Wähle den einen oder anderen.quelle
doc = XDocument.Load(s)
- siehe Update.XDocument
, können Sie einfach tun,var doc = XDocument.Parse(xml)
wo xml eine Zeichenfolge ist, die Ihr XML enthält.Weiterverfolgung der Antwort von Ondrej Tucny:
Wenn Sie stattdessen eine XML-Zeichenfolge verwenden möchten, können Sie ein XElement verwenden und die Methode "parse" aufrufen. (Da XElement und XDocument für Ihre Anforderungen Ihren Anforderungen entsprechen würden)
Zum Beispiel ;
string theXML = '... get something xml-ish...'; XElement xEle = XElement.Parse(theXML); // do something with your XElement
Mit der Parse-Methode von XElement können Sie eine XML-Zeichenfolge übergeben, während die Load-Methode einen Dateinamen benötigt.
quelle
Warum nicht
XDocument.Parse(theXml);
Ich gehe davon aus, dass dies die richtige Lösung sein wird
quelle
Wenn dies wirklich Ihre Ausgabe ist, handelt es sich aufgrund der Minuszeichen ('-') um illegales XML. Ich vermute, dass Sie dies aus einem Browser wie IE ausgeschnitten und eingefügt haben. Sie müssen das genaue XML in einem Texteditor und nicht in einem Browser anzeigen.
quelle