XML illegale tekens in pad

Ik vraag een op soap gebaseerde service en wil de geretourneerde XML analyseren wanneer ik de XML in een XDoc probeer te laden om de gegevens op te vragen. krijg ik de foutmelding ‘illegale tekens in pad’? Dit (hieronder) is de XML die door de service wordt geretourneerd. Ik wil gewoon de lijst met wedstrijden krijgen en ze in een lijst plaatsen die ik heb ingesteld. De XML wordt wel in een XML-document geladen, dus moet deze correct zijn opgemaakt?

Enig advies over de beste manier om dit te doen en de fout te omzeilen, wordt zeer op prijs gesteld.

<?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 is mijn code, ik moet de gegevens in een XDoc kunnen opvragen:

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

Antwoord 1, autoriteit 100%

Je laat je broncode niet zien, maar ik denk dat je dit doet:

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

De Loadmethode verwacht een bestandsnaamzelf geen XML. Om een ​​echte XML te laden, gebruikt u gewoon de LoadXml-methode:

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

Op dezelfde manier verwacht de methode Load(string)bij gebruik van Load(string)een bestandsnaam, geen echte XML. Er is echter geen LoadXml-methode, dus de juiste manier om de XML vanuit een string te laden is als volgt:

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

Eigenlijk is het bij het ontwikkelen van iets een heel goed idee om aandacht te besteden aan de semantiek(betekenis) van parameters, niet alleen aan hun type. Als het type parameter een stringis, betekent dit niet dat men zomaar alles wat een string is, kan invoeren.

Ook met betrekking tot uw bijgewerkte vraag heeft het geen zin om XmlDocumenten Load(string)tegelijkertijd te gebruiken. Kies de een of de ander.


Antwoord 2, autoriteit 4%

Vervolg op het antwoord van Ondrej Tucny:

Als u in plaats daarvan een xml-tekenreeks wilt gebruiken, kunt u een XElement gebruiken en de “parse”-methode aanroepen. (Aangezien XElement en XDocument voor uw behoeften aan uw behoeften voldoen)

Bijvoorbeeld ;

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

Met de Parse-methode van XElement kun je een XML-tekenreeks invoeren, terwijl de methode Load een bestandsnaam nodig heeft.


Antwoord 3

Waarom niet

XDocument.Parse(theXml);

Ik neem aan dat dit de juiste oplossing is


Antwoord 4

Als dit echt je output is, is het illegale XML vanwege de mintekens (‘-‘). Ik vermoed dat je dit hebt geknipt en geplakt vanuit een browser zoals IE. U moet de exacte XML uit een teksteditor laten zien, niet uit een browser.

Other episodes