Недопустимые символы 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);
Ответы
Ответ 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);
Я предполагаю, что это будет правильное решение