XML中的非法字符

我正在查询基于SOAP的服务,并希望分析返回的XML,但是当我尝试将XML加载到XDoc中以查询数据时。 我得到一个“path中的非法字符”的错误信息? 这(下面)是从服务返回的XML。 我只想获得比赛名单,并把它们放到我设置的名单中。 XMl是否加载到XML文档中,但必须正确格式化?

任何build议,最好的方式来做到这一点,并得到一个错误将不胜感激。

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

提前谢谢了。

你不显示你的源代码,但是我猜你正在做的是这样的:

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

Load方法期望文件名不是XML本身。 要加载实际的XML,只需使用LoadXml方法:

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

同样,使用XDocumentLoad(string)方法需要一个文件名 ,而不是实际的XML。 但是,没有LoadXml方法,因此从string加载XML的正确方法如下所示:

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

事实上,在开发任何东西时,注意参数的语义 (意义)而不仅仅是它们的types是一个非常好的主意。 当一个参数的types是一个string时,并不意味着只能input任何string。

此外,就您更新的问题而言,同时使用XmlDocumentXDocument是没有意义的。 select一个或另一个。

跟随Ondrej Tucny的回答:

如果您想使用xmlstring,则可以使用XElement,并调用“parse”方法。 (由于您的需要,XElement和XDocument将满足您的需求)

例如 ;

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

XElement的Parse方法允许您传递一个XMLstring,而Load方法需要一个文件名。

如果这真的是你的输出,它是非法的XML,因为减号(' – ')。 我怀疑你已经从IE浏览器中剪切并粘贴了。 您必须从文本编辑器中显示确切的XML,而不是浏览器。

为什么不

 XDocument.Parse(theXml); 

我认为这将是正确的解决scheme