tags:

views:

49

answers:

2

I am querying a soap based service and wish to analyse the XML returned however when I try to load the XML into an XDoc in order to query the data. am getting an 'illegal characters in path' error message? This (below) is the XML returned from the service. I simply want to get the list of competitions and put them into a List I have setup. The XMl Does load into an XML Document though so must be correctly formatted?.

Any advice on the best way to do this and get round the error would be greatly appreciated.

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

Here is my code, I need to be able to query the data in an XDoc:

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

Many thanks in advance.

+3  A: 

You don't show your source code, however I guess what you are doing is this:

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

The Load method expects a file name not an XML itself. To load an actual XML, just use the LoadXml method:

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

Similarly, using XDocument the Load(string) method expects a filename, not an actual XML. However, there's no LoadXml method, so the correct way of loading the XML from a string is like this:

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

As a matter of fact when developing anything, it's a very good idea to pay attention to the semantics (meaning) of parameters not just their types. When the type of a parameter is a string it doesn't mean one can feed in just anything that is a string.

Also in respect to your updated question, it makes no sense to use XmlDocument and XDocument at the same time. Choose one or the another.

Ondrej Tucny
Thanks for the reply. This works to load it into an XMLDocument but I am still getting the illegal characters in path if I try to load this XML into an XDoc in order to query the data. Any ideas? string theXml = myGSM.get_competitions("", "", 1, "en", "yes");XmlDocument myDoc = new XmlDocument();myDoc.LoadXml(theXml); XDocument xDoc = XDocument.Load(myDoc.InnerXml);
Kevin
Sorry first time using Stackoverflow so having trouble adding and formatting my responses, as you can see!!!
Kevin
@Kevin see my updated answer.
Ondrej Tucny
Thanks for the comprehensive explanation, very useful. I am now however getting the following error when I try your suggestion as shown above, any ideas? 'System.Xml.Linq.XDocument.Load(System.IO.TextReader)' cannot be accessed with an instance reference; qualify it with a type name
Kevin
@Kevin Eh, sorry, my fault. The correct code is `doc = XDocument.Load(s)` — see update.
Ondrej Tucny
Brilliant, thats works great, many thanks for your help on this Ondrej its greatly appreciated. All the best.
Kevin
+1  A: 

If this is really your output it is illegal XML because of the minus characters ('-'). I suspect that you have cut and pasted this from a browser such as IE. You must show the exact XML from a text editor, not a browser.

peter.murray.rust
I have copied and pasted from the XML Visualier in VS 2010, these are just to expand the XML nodes are they not?
Kevin
@Kevin It's almost impossible to debug characters after they have been through a browser display. It's possible that an illegal character has been transformed into something else. I suspect the real reason is closer to @Ondrej Tucny but it's always essential to know the exact XML. For example a space at the start of the document would be illegal though you'd probably get a different error msg
peter.murray.rust
Many thanks for this information @peter.murray.rust I will bear this in mind in future. All the best.
Kevin
There are many XML validators online - suggest you paste any dubious XML into them, and get error messages. http://www.xmlvalidation.com/ was the first in my Googling
peter.murray.rust