68 votes

Caractères illégaux XML dans le chemin

Je suis interrogation d'un savon à base de service et souhaitez analyser le document XML renvoyé cependant lorsque j'essaie de charger le XML dans une XDoc, afin d'interroger les données. je reçois un 'caractères illégaux dans le chemin" message d'erreur? Ce (ci-dessous) est le XML renvoyé par la fonction. Je tiens simplement à obtenir la liste des concours et les mettre dans une Liste que j'ai de l'installation. Le XMl Ne charger dans un Document XML bien doit être correctement formatée?.

Des conseils sur la meilleure façon de le faire et de le contourner, l'erreur serait grandement apprécié.

<?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>

Voici mon code, j'ai besoin d'être en mesure d'interroger les données dans un XDoc:

string theXml = myGSM.get_competitions("", "", 1, "en", "yes");
XmlDocument myDoc = new XmlDocument();
MyDoc.LoadXml(theXml);
XDocument xDoc = XDocument.Load(myDoc.InnerXml);

Merci beaucoup à l'avance.

220voto

Ondrej Tucny Points 13127

Vous ne montrez pas votre code source, cependant je pense que ce que tu fais, c'est ceci:

string xml = ... retrieve ...;
XmlDocument doc = new XmlDocument();
doc.Load(xml); // error thrown here

L' Load méthode attend un nom de fichier pas un XML lui-même. Pour charger une réelle XML, il suffit d'utiliser l' LoadXml méthode:

... same code ...
doc.LoadXml(xml);

De même, à l'aide de XDocument le Load(string) méthode attend un nom de fichier, pas un XML. Cependant, il n'y a pas d' LoadXml méthode, donc la bonne façon de chargement du XML à partir d'une chaîne de caractères est comme ceci:

string xml = ... retrieve ...;
XDocument doc;
using (StringReader s = new StringReader(xml))
{
    doc = XDocument.Load(s);
}

Comme une question de fait, lors de l'élaboration d'une chose, c'est une très bonne idée de prêter attention à la sémantique (signification) de paramètres et pas seulement leurs types. Lorsque le type d'un paramètre est une string il ne signifie pas que l'on peut nourrir en seulement quelque chose qui est une chaîne de caractères.

Également dans le respect de la mise à jour de votre question, il n'a pas de sens d'utiliser XmlDocument et XDocument dans le même temps. Choisir l'un ou l'autre.

9voto

Harvey Darvey Points 376

Suivi de la réponse d'Ondrej Tucny:

Si vous souhaitez utiliser une chaîne xml à la place, vous pouvez utiliser un XElement et appeler la méthode "parse". (Puisque pour vos besoins, XElement et XDocument répondraient à vos besoins)

Par exemple ;

 string theXML = '... get something xml-ish...';
XElement xEle = XElement.Parse(theXML);

// do something with your XElement
 

La méthode Parse de XElement vous permet de transmettre une chaîne XML, tandis que la méthode Load a besoin d'un nom de fichier.

2voto

peter.murray.rust Points 13406

Si c'est vraiment votre sortie, c'est du XML illégal à cause des caractères moins ('-'). Je soupçonne que vous avez coupé et collé cela à partir d'un navigateur tel que IE. Vous devez afficher le XML exact à partir d'un éditeur de texte, pas d'un navigateur.

1voto

Swaraj Points 144

Pourquoi pas

 XDocument.Parse(theXml);
 

Je suppose que ce sera la bonne solution

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X