Подтвердить что ты не робот

Недопустимые символы XML в пути

Я обращаюсь к службе на основе мыла и хочу проанализировать полученный XML, однако, когда я пытаюсь загрузить XML в XDoc, чтобы запросить данные. Я получаю сообщение об ошибке "незаконные символы в пути"? Это (ниже) - это XML, возвращаемый службой. Я просто хочу получить список конкурсов и поместить их в список, который у меня установлен. XML действительно загружается в XML-документ, но должен быть правильно отформатирован?

Любые советы по наилучшему способу сделать это и обойти ошибку будут очень признательны.

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

Вот мой код, мне нужно иметь возможность запрашивать данные в XDoc:

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

Ответ 1

Вы не показываете свой исходный код, но я предполагаю, что вы делаете это:

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

Метод Load предполагает, что имя файла не является самим XML. Чтобы загрузить фактический XML, просто используйте метод LoadXml:

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

Аналогично, используя XDocument, метод Load(string) ожидает имя файла, а не фактический XML. Однако нет метода LoadXml, поэтому правильный способ загрузки XML из строки выглядит следующим образом:

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

На самом деле, при разработке чего-либо, очень хорошая идея обратить внимание на семантику (значение) параметров не только их типов. Если тип параметра равен string, это не значит, что вы можете подать только что-нибудь, что является строкой.

Также в отношении вашего обновленного вопроса нет смысла использовать XmlDocument и XDocument одновременно. Выберите тот или другой.

Ответ 2

В ответ на Ondrej Tucny ответ:

Если вы хотите использовать вместо этого строку xml, вы можете использовать XElement и вызвать метод "parse". (Поскольку для ваших нужд XElement и XDocument отвечают вашим потребностям)

Например;

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

// do something with your XElement

Метод XElement Parse позволяет передавать строку XML, а методу Load - имя файла.

Ответ 3

Если это действительно ваш вывод, это незаконный XML из-за минусовых символов ('-'). Я подозреваю, что вы вырезали и вставляли это из браузера, такого как IE. Вы должны показать точный XML из текстового редактора, а не из браузера.

Ответ 4

Почему бы не

XDocument.Parse(theXml);

Я предполагаю, что это будет правильное решение