C# 如何在WindowsPhone7应用程序中解析XML
有人能告诉我如何解析从wcf rest服务接收的XML字符串吗 我的webserive XML字符串如下所示C# 如何在WindowsPhone7应用程序中解析XML,c#,windows-phone-7,xml-parsing,webservice-client,C#,Windows Phone 7,Xml Parsing,Webservice Client,有人能告诉我如何解析从wcf rest服务接收的XML字符串吗 我的webserive XML字符串如下所示 <WS> <Info> <Name>Beta</Name> <Description>Prototyps</Description> </Info> <Pages> <Page> <
<WS>
<Info>
<Name>Beta</Name>
<Description>Prototyps</Description>
</Info>
<Pages>
<Page>
<Name>Custom</Name>
<Description>toDo</Description>
</Page>
...many other pages...
</Pages>
</WS>
如果我试图通过XDocument.Load(e.Result)解析它,那么我会得到异常:找不到文件
我只需要Info节点的“唯一”信息和所有页面节点及其值的列表
更新
即使我试图通过var item=xdoc.Root.subjects()加载根元素;项将分配给整个xml文件
更新2根元素中的名称空间似乎出现了问题。使用名称空间时,xdocument将无法正确解析webservice输出。如果我删除名称空间,它可以正常工作。有人能给我解释一下这个问题吗?有没有一种简便的方法可以删除所有名称空间
更新3一种删除名称空间的简便方法Viktor-尝试按提供的文件名加载XDocument,而不是XML元素的字符串表示形式
您可以说var-answer=XElement.Parse(e.Result.subscriptions(“WS”);//空
,但哪个部分是空的?解析的XElement还是试图获取后代?如果..
是您的根元素,那么.downents(“WS”)
调用是否会返回根元素?根据的文档,我猜不是。你有没有试过打电话:
var answer = XElement.Parse(e.Result).Descendants("Info");
在我这方面的一个快速测试表明,使用WS作为根元素,调用
XElement.Parse(e.Result.subscriptions(“WS”)
没有产生任何结果,而XElement.Parse(e.Result.substands(“Info”)
生成了…
元素。使用非常简单的XML如果您知道格式不会改变,您可能会对使用XPath感兴趣:
var xdoc = XDocument.Parse(e.Result);
var name = xdoc.XPathSelectElement("/WS/Info/Name");
但是对于多个页面,可能需要一些linq到xml
var xdoc = XDocument.Parse(xml);
var pages = xdoc.Descendants("Pages").Single();
var PagesList = pages.Elements().Select(x => new Page((string)x.Element("Name"), (string)x.Element("Description"))).ToList();
其中Page是一个简单类:
public class Page
{
public string Name { get; set; }
public string Descrip { get; set; }
public Page(string name, string descrip)
{
Name = name;
Descrip = descrip;
}
}
如果你需要更多的解释,请告诉我
还要选择不带XPath的信息:
var info = xdoc.Descendants("Info").Single();
var InfoName = info.Element("Name").Value;
var InfoDescrip = info.Element("Description").Value;
我并不真正涉猎WCF,但我很确定有更简单的方法来使用WCF服务。很抱歉,这可能是另一个未使用WCF实现的restful服务。在一般情况下,手动解析可能会更好,不是吗?非常正确,我相信这就是他想要的。你对XElement.parse(e.Result)的建议。subjects(“Info”)也不起作用。我无法grep该xml文件的任何节点,但是如果在e.Result中查看,预期的“xml字符串”出现了。Viktor-这很有趣。我将上面的XML片段一字不差地放入字符串中(省略号除外),并通过XElement.Parse()运行它,生成结果Info元素。您是否在代码中设置了断点,以查看调用
.subjections(“Info”)
的结果?肯定还有其他问题。感谢您的推荐,但是WP7上没有XPathSelectElement。如果我尝试“var pages=xdoc.subjections(“pages”).Single();”则会得到“invalidoOperationException”-“序列不包含元素”@ViktorZimmermann抱歉,我不知道XPath WP7的限制。另外,我的代码中有一些小错误,但我已经用测试过的代码进行了编辑,这些代码应该可以工作。请让我知道。
var info = xdoc.Descendants("Info").Single();
var InfoName = info.Element("Name").Value;
var InfoDescrip = info.Element("Description").Value;