C# 从XML REST POST webResponse解析C中的XML

C# 从XML REST POST webResponse解析C中的XML,c#,xml,parsing,C#,Xml,Parsing,我正在尝试解析来自REST端点的XML响应。如果相关的话,我正在使用POST请求。我无法正确解析文档。我已经研究了整个堆栈溢出,没有一个适用于我的响应。如何解析XML?我已经尝试了以下所有方法: 使用XDocument: Stream postData = resp.GetResponseStream(); StreamReader reader = new StreamReader(postData, Encoding.UTF8); string result = reader.ReadToE

我正在尝试解析来自REST端点的XML响应。如果相关的话,我正在使用POST请求。我无法正确解析文档。我已经研究了整个堆栈溢出,没有一个适用于我的响应。如何解析XML?我已经尝试了以下所有方法:

使用XDocument:

Stream postData = resp.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
var document = XDocument.Parse(result);
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
var items = document.Descendants("NameFirst")
                    .ToDictionary(i => (string)i.Attribute("Key"),
                                  i => (string)i.Attribute("Value"));
对每个元素使用嵌套元素:

Stream postData = resp.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
XDocument document = XDocument.Parse(result);
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
string list = "";
foreach (XElement level1 in document.Elements("feed"))
{
    foreach (XElement level2 in level1.Elements("entry"))
    {
        foreach (XElement level3 in level2.Elements("content"))
        {
            foreach (XElement entry in level3.Elements("Entry"))
            {
                list += entry.Attribute("NameFirst").Value;
                list += entry.Attribute("NameLast").Value;
            }
        }
    }
}
使用子体方法的串联:

Stream postData = resp.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
var document = XDocument.Parse(result);
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
var listOfFields = document.Descendants(ns + "feed").Descendants(ns + "entry").Descendants(ns + "content").Descendants(ns + "entry").Select(x => x.Elements().First().Value).ToList();
ResultLabel.Text = "";
foreach(String item in listOfFields){
    ResultLabel.Text += item;
}
Stream postData = resp.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
var document = XDocument.Parse(result);
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
var listOfFields = document.Descendants(ns + "feed").Descendants(ns + "entry").Descendants(ns + "content").Descendants(ns + "entry").Select(x => x.Elements().First().Value).ToList();
var entry_ = document.Root.Element("entry");
var content = entry_.Element("content");
var entry = content.Element("Entry");
var fname = entry.Element("NameFirst").Value;
var lname = entry.Element("NameLast").Value;
ResultLabel.Text = string.Join(",", lname, fname);
使用多元素方法:

Stream postData = resp.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
var document = XDocument.Parse(result);
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
var listOfFields = document.Descendants(ns + "feed").Descendants(ns + "entry").Descendants(ns + "content").Descendants(ns + "entry").Select(x => x.Elements().First().Value).ToList();
ResultLabel.Text = "";
foreach(String item in listOfFields){
    ResultLabel.Text += item;
}
Stream postData = resp.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
var document = XDocument.Parse(result);
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
var listOfFields = document.Descendants(ns + "feed").Descendants(ns + "entry").Descendants(ns + "content").Descendants(ns + "entry").Select(x => x.Elements().First().Value).ToList();
var entry_ = document.Root.Element("entry");
var content = entry_.Element("content");
var entry = content.Element("Entry");
var fname = entry.Element("NameFirst").Value;
var lname = entry.Element("NameLast").Value;
ResultLabel.Text = string.Join(",", lname, fname);
我的XML响应:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">Search Results</title>
    <id>https://myendpoint.com/Rest/services/select/Entry</id>
    <updated>2015-10-07T09:51:32Z</updated>
    <link rel="self" type="application/atom+xml" href="https://myendpoint.com/Rest/services/select/Entry" />
    <entry>
        <id>https://myendpoint.com/services/select/Entry/26032</id>
        <title type="text">Smith, John</title>
        <published>2013-10-08T10:14:20Z</published>
        <updated>2015-10-02T12:14:18Z</updated>
        <contributor><name>WebUser</name></contributor>
            <content type="xhtml">
            <Entry>
                <EntryID>26032</EntryID>
                <CategoryID>0</CategoryID>
                <EventID>0</EventID>
                <GroupID>0</GroupID>
                <ContactID>0</ContactID>
                <AddressTypeID>0</AddressTypeID>
                <PinNumber>0000</PinNumber>
                <Password></Password>
                <PortalEmail></PortalEmail>
                <NameLast>Smith</NameLast>
                <NameFirst>John</NameFirst>
                <NameTitle></NameTitle>
                <NamePreferred>Mike</NamePreferred>
                <NameWeb>smith</NameWeb>
                <NameOther></NameOther>
                <NameInitials></NameInitials>
                <NameSharer></NameSharer>
                <GenderEnum>Female</GenderEnum>
                <Birth_GenderEnum>Male</Birth_GenderEnum>
                <DirectoryFlagPrivacy>false</DirectoryFlagPrivacy>
                <Position></Position>
                <ID1>123456</ID1>
                <ID2>smith</ID2>
                <ID3></ID3>
                <ID4>0</ID4>
                <ID5>0</ID5>
                <PhoneProcessToAccount>true</PhoneProcessToAccount>
                <PhoneChargeTypeID>0</PhoneChargeTypeID>
                <PhoneDisableValue>0</PhoneDisableValue>
                <PhoneRestrictValue>0</PhoneRestrictValue>
                <PhoneControlEnum>Default</PhoneControlEnum>
                <TaxExemptionEnum>None</TaxExemptionEnum>
                <Testing>true</Testing>
                <timestamp>000007975236</timestamp>
            </Entry>
        </content>
    </entry>
</feed>

您可以将XML反序列化为易于访问的对象。以下是如何做到这一点:

创建将保存反序列化数据的对象:

通过复制从REST端点获得的XML,然后在VisualStudio中转到编辑->粘贴特殊->将XML粘贴为类,可以轻松地完成此操作

创建类后,您将得到如下结果:

然后可以将XML反序列化为提要对象,如下所示:


您可以将XML反序列化为易于访问的对象。以下是如何做到这一点:

创建将保存反序列化数据的对象:

通过复制从REST端点获得的XML,然后在VisualStudio中转到编辑->粘贴特殊->将XML粘贴为类,可以轻松地完成此操作

创建类后,您将得到如下结果:

然后可以将XML反序列化为提要对象,如下所示:


@仇杀它什么都不解析。XDocument是变量中唯一有数据的东西。下面的一切都是空白,这是atom提要。若你们在互联网上搜索,你们可以找到可以节省你们一些时间的解析器库。@vendettamit它不会解析任何东西。XDocument是变量中唯一有数据的东西。下面的一切都是空白,这是atom提要。若你们在互联网上搜索,你们可以找到解析器库,这将节省你们一些时间。