XML中的非法字符
我正在查询基于soap的服务,并希望分析返回的XML,但是当我尝试将XML加载到XDoc中以查询数据时。我得到'路径中的非法字符'错误信息?这(下面)是从服务返回的XML。我只想获得比赛名单,并将它们放入我设置的名单中。 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);
你不显示你的源代码,但我猜你在做什么是这个:
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
是没有意义的。选择一个或另一个。
感谢您的回复。这可以将其加载到XMLDocument中,但如果我尝试将此XML加载到XDoc中以查询数据,我仍然会收到路径中的非法字符。有任何想法吗? string theXml = myGSM.get_competitions(“”,“”,1,“en”,“yes”); XmlDocument myDoc = new XmlDocument(); myDoc.LoadXml(theXml); XDocument xDoc = XDocument.Load(myDoc.InnerXml); – Kevin 2010-10-30 09:02:53
对不起,第一次使用Stackoverflow,所以无法添加和格式化我的回复,正如你所看到的! – Kevin 2010-10-30 09:03:30
@凯文见我更新的答案。 – 2010-10-30 09:09:26
如果这实际上是您的输出,由于减号字符(' - '),它是非法的XML。我怀疑你已经从IE等浏览器中剪切并粘贴了它。您必须从文本编辑器中显示确切的XML,而不是浏览器。
上的Ondrej Tucny的答案随访:
如果你想使用XML字符串,而不是,您可以使用的XElement,并称之为“解析”的方法。 (由于您的需要,XElement和XDocument将满足您的需求)
例如;
string theXML = '... get something xml-ish...';
XElement xEle = XElement.Parse(theXML);
// do something with your XElement
的的XElement的解析方法,可以让你在一个XML字符串传递,而Load方法需要一个文件名。
谢谢@哈维达维这是有帮助的 – abhi 2013-08-15 20:39:35
为什么不
XDocument.Parse(theXml);
我认为这将是正确的解决方案
那些人在那里'-'字符来自哪里?它是复制/粘贴错误还是它在实际的XML? – Oded 2010-10-30 08:48:22
@Oded我想他们来自VS的XML视图的IE复制和粘贴XML。 – 2010-10-30 08:50:11
是的,我从Visual Studio中的XMLVisualier复制 – Kevin 2010-10-30 09:04:38