C# 如何在WindowsPhone7应用程序中解析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> <

有人能告诉我如何解析从wcf rest服务接收的XML字符串吗

我的webserive XML字符串如下所示

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