简体   繁体   English

如何从SharePoint REST api调用读取XML响应

[英]How to read the XML response from SharePoint REST api call

I am getting XML response for REST call which includes multiple subnodes for each entry. 我正在获得REST调用的XML响应,其中每个条目都包含多个子节点 Basically any Lookup field or User field results in a subnode . 基本上,任何“ Lookup字段或“ User字段都会产生一个子节点 Can anybody help me to understand how to read these subnodes ? 有人可以帮助我了解如何读取这些子节点吗? As the element name is Id or Email which is repetitive. 由于元素名称是Id或重复的Email Sorry for the very long XML but this is a result of fetching only 2 items. 很抱歉,XML太长了,但这是仅获取2个项目的结果。

<?xml version="1.0" encoding="utf-8"?>
<feed xml:base="https://ppespcollab.amat.com/sites/SSAS/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml">
    <id>f7f3e0d8-73aa-4bd9-a11c-c8d2c884895c</id>
    <title />
    <updated>2017-09-14T09:51:55Z</updated>
    <entry m:etag="&quot;5&quot;">
        <id>Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)</id>
        <category term="SP.Data.RequestsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
        <link rel="edit" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)" />
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Name" type="application/atom+xml;type=entry" title="Name" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)/Name">
            <m:inline>
                <entry>
                    <id>d724a6a3-c532-4f43-baaf-f3a25bbaccca</id>
                    <category term="SP.Data.UserInfoItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <author>
                        <name />
                    </author>
                    <content type="application/xml">
                        <m:properties>
                            <d:Id m:type="Edm.Int32">31210</d:Id>
                            <d:EMail>Ishan_Halarnkar@contractor.amat.com</d:EMail>
                        </m:properties>
                    </content>
                </entry>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Segment" type="application/atom+xml;type=entry" title="Segment" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)/Segment">
            <m:inline>
                <entry>
                    <id>9d4306ec-4b01-4624-984b-79445b9d2ec1</id>
                    <category term="SP.Data.SegmentsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <author>
                        <name />
                    </author>
                    <content type="application/xml">
                        <m:properties>
                            <d:Title>Test - TechM</d:Title>
                            <d:Id m:type="Edm.Int32">10</d:Id>
                        </m:properties>
                    </content>
                </entry>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/BU" type="application/atom+xml;type=feed" title="BU" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)/BU">
            <m:inline>
                <feed>
                    <id>7d3cf6e4-9fdc-4c21-90e9-5112b963dc49</id>
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <entry>
                        <id>44c3ff84-4650-4d85-a6dc-908639338be4</id>
                        <category term="SP.Data.Business_x0020_UnitsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                        <title />
                        <updated>2017-09-14T09:51:55Z</updated>
                        <author>
                            <name />
                        </author>
                        <content type="application/xml">
                            <m:properties>
                                <d:Title>CMP</d:Title>
                                <d:Id m:type="Edm.Int32">14</d:Id>
                            </m:properties>
                        </content>
                    </entry>
                </feed>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Author0" type="application/atom+xml;type=feed" title="Author0" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)/Author0">
            <m:inline>
                <feed>
                    <id>0f399745-10f4-40f0-be4e-1f9d69222d49</id>
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <entry>
                        <id>4c0509ce-62c4-4e90-9689-134b145b02a0</id>
                        <category term="SP.Data.UserInfoItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                        <title />
                        <updated>2017-09-14T09:51:55Z</updated>
                        <author>
                            <name />
                        </author>
                        <content type="application/xml">
                            <m:properties>
                                <d:Id m:type="Edm.Int32">31210</d:Id>
                                <d:EMail>Ishan_Halarnkar@contractor.amat.com</d:EMail>
                            </m:properties>
                        </content>
                    </entry>
                </feed>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/CC_x0020_List" type="application/atom+xml;type=feed" title="CC_x0020_List" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)/CC_x0020_List" />
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Publication_x0020_Type" type="application/atom+xml;type=entry" title="Publication_x0020_Type" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(160)/Publication_x0020_Type">
            <m:inline>
                <entry>
                    <id>a002d855-e51b-4f4f-b8ec-3725cf4aecb9</id>
                    <category term="SP.Data.Publication_x0020_TypeListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <author>
                        <name />
                    </author>
                    <content type="application/xml">
                        <m:properties>
                            <d:Title>Presentation</d:Title>
                            <d:Id m:type="Edm.Int32">2</d:Id>
                        </m:properties>
                    </content>
                </entry>
            </m:inline>
        </link>
        <title />
        <updated>2017-09-14T09:51:55Z</updated>
        <author>
            <name />
        </author>
        <content type="application/xml">
            <m:properties>
                <d:Id m:type="Edm.Int32">160</d:Id>
                <d:Title>asssfsfdsf</d:Title>
                <d:End_x0020_Use>BLR</d:End_x0020_Use>
                <d:Approval_x0020_Type>Parallel</d:Approval_x0020_Type>
                <d:Due_x0020_Date m:type="Edm.DateTime">2017-09-26T05:00:00Z</d:Due_x0020_Date>
                <d:Description>sdfssfsfssf</d:Description>
                <d:Status>Submitted</d:Status>
                <d:History>Request submitted by Ishan Halarnkar --CNTR on Wednesday, September 13, 2017 8&amp;#58;15 AM&lt;/br&gt;</d:History>
                <d:RequestID>2017_00000160</d:RequestID>
                <d:EndUseYear>2014</d:EndUseYear>
                <d:ID m:type="Edm.Int32">160</d:ID>
            </m:properties>
        </content>
    </entry>
    <entry m:etag="&quot;7&quot;">
        <id>Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)</id>
        <category term="SP.Data.RequestsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
        <link rel="edit" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)" />
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Name" type="application/atom+xml;type=entry" title="Name" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)/Name">
            <m:inline>
                <entry>
                    <id>b76cc22b-f985-444a-873a-46ae2cd0a10a</id>
                    <category term="SP.Data.UserInfoItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <author>
                        <name />
                    </author>
                    <content type="application/xml">
                        <m:properties>
                            <d:Id m:type="Edm.Int32">6760</d:Id>
                            <d:EMail>Denise_Schmidt@amat.com</d:EMail>
                        </m:properties>
                    </content>
                </entry>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Segment" type="application/atom+xml;type=entry" title="Segment" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)/Segment">
            <m:inline>
                <entry>
                    <id>6e70b80b-fff6-4662-8f53-26fc977f34ef</id>
                    <category term="SP.Data.SegmentsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <author>
                        <name />
                    </author>
                    <content type="application/xml">
                        <m:properties>
                            <d:Title>Testing Segment 0917</d:Title>
                            <d:Id m:type="Edm.Int32">11</d:Id>
                        </m:properties>
                    </content>
                </entry>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/BU" type="application/atom+xml;type=feed" title="BU" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)/BU">
            <m:inline>
                <feed>
                    <id>f5e5e76d-07b7-442f-b6bf-73d9ed65e708</id>
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <entry>
                        <id>07bd9eed-23f7-4b10-8f38-42e0845f19ca</id>
                        <category term="SP.Data.Business_x0020_UnitsListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                        <title />
                        <updated>2017-09-14T09:51:55Z</updated>
                        <author>
                            <name />
                        </author>
                        <content type="application/xml">
                            <m:properties>
                                <d:Title>ds Testing</d:Title>
                                <d:Id m:type="Edm.Int32">24</d:Id>
                            </m:properties>
                        </content>
                    </entry>
                </feed>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Author0" type="application/atom+xml;type=feed" title="Author0" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)/Author0">
            <m:inline>
                <feed>
                    <id>717cf9a2-9f0a-4265-bb32-1c90989ba6ed</id>
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <entry>
                        <id>4c593a4e-5c2e-4f1a-8c99-cb2d81b33af3</id>
                        <category term="SP.Data.UserInfoItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                        <title />
                        <updated>2017-09-14T09:51:55Z</updated>
                        <author>
                            <name />
                        </author>
                        <content type="application/xml">
                            <m:properties>
                                <d:Id m:type="Edm.Int32">6760</d:Id>
                                <d:EMail>Denise_Schmidt@amat.com</d:EMail>
                            </m:properties>
                        </content>
                    </entry>
                </feed>
            </m:inline>
        </link>
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/CC_x0020_List" type="application/atom+xml;type=feed" title="CC_x0020_List" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)/CC_x0020_List" />
        <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Publication_x0020_Type" type="application/atom+xml;type=entry" title="Publication_x0020_Type" href="Web/Lists(guid'16b26978-b5d8-407a-a82d-e66017158895')/Items(159)/Publication_x0020_Type">
            <m:inline>
                <entry>
                    <id>62f94289-1e4b-4e83-94fe-1f518bde639b</id>
                    <category term="SP.Data.Publication_x0020_TypeListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                    <title />
                    <updated>2017-09-14T09:51:55Z</updated>
                    <author>
                        <name />
                    </author>
                    <content type="application/xml">
                        <m:properties>
                            <d:Title>Presentation</d:Title>
                            <d:Id m:type="Edm.Int32">2</d:Id>
                        </m:properties>
                    </content>
                </entry>
            </m:inline>
        </link>
        <title />
        <updated>2017-09-14T09:51:55Z</updated>
        <author>
            <name />
        </author>
        <content type="application/xml">
            <m:properties>
                <d:Id m:type="Edm.Int32">159</d:Id>
                <d:Title>Test on 9/12/17</d:Title>
                <d:End_x0020_Use>TPAS</d:End_x0020_Use>
                <d:Approval_x0020_Type>Parallel</d:Approval_x0020_Type>
                <d:Due_x0020_Date m:type="Edm.DateTime">2017-09-28T05:00:00Z</d:Due_x0020_Date>
                <d:Description>testing email notices</d:Description>
                <d:Status>Submitted</d:Status>
                <d:History>Request delegated by Denise Schmidt (ds Testing - CTO) on Tuesday, September 12, 2017 2&amp;#58;16 PM&lt;/br&gt;Request approved by Denise Schmidt (ds Testing - Manager) on Tuesday, September 12, 2017 2&amp;#58;15 PM&lt;/br&gt;Request submitted by Denise Schmidt on Tuesday, September 12, 2017 2&amp;#58;12 PM&lt;/br&gt;</d:History>
                <d:RequestID>2017_00000159</d:RequestID>
                <d:EndUseYear m:null="true" />
                <d:ID m:type="Edm.Int32">159</d:ID>
            </m:properties>
        </content>
    </entry>

The code i am using is but is not giving the expected results : 我正在使用的代码是但没有给出预期的结果:

XmlDocument listXml = new XmlDocument();
            XmlNamespaceManager xmlnspm = new XmlNamespaceManager(new NameTable());
            xmlnspm.AddNamespace("atom", "http://www.w3.org/2005/Atom");
            xmlnspm.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");
            xmlnspm.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
            listXml.LoadXml(response);
            var prop = listXml.SelectNodes("//atom:entry/atom:content/m:properties", xmlnspm);
            List<string> sdsd = new List<string>();
            foreach (XmlNode ndlist in prop)

            {

                sdsd.Add(ndlist.SelectSingleNode("d:Id", xmlnspm).InnerXml +
                    ndlist.SelectSingleNode("d:EMail", xmlnspm).InnerXml +
                     ndlist.SelectSingleNode("d:Status", xmlnspm).InnerXml+
                     ndlist.SelectSingleNode("d:History", xmlnspm).InnerXml);
            }

The result i am looking for is : For each entry, read the 我正在寻找的结果是:对于每个条目,请阅读

  1. If Name then Name(Id and Email) 如果是姓名,则为姓名(ID和电子邮件)
  2. If Segment then Segment(Title and Id) 如果是细分,则细分(标题和ID)
  3. If BU then BU(Title and Id) 如果BU,则BU(标题和ID)
  4. If Author0 then Author0(Id and Email) ...likewise for all subnodes and for all main nodes i need the value 如果Author0,那么Author0(Id和Email)...同样对于所有子节点和所有主节点,我都需要该值
  5. Id ID
  6. Title 标题
  7. End_x0020_Use End_x0020_使用
  8. Approval_x0020_Type Approval_x0020_Type

Is there any way to Serialize this data in a more readable format or i'l have to loop each and every node? 有什么方法可以以更易读的格式序列化此数据,或者我必须循环每个节点? Please suggest the best option as i don't have much experience in XML data. 请提出最佳选择,因为我在XML数据方面经验不足。

Use xml linq 使用xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication4
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static List<XElement> nodes;
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            XElement feed = doc.Root;
            XNamespace ns = feed.GetDefaultNamespace();
            foreach (XElement entry in feed.Elements(ns + "entry"))
            {
                Entry newEntry = new Entry();
                Entry.entries.Add(newEntry);

                newEntry.title = (string)entry.Element(ns + "title");
                newEntry.end_x0020_Use = (string)entry.Descendants().Where(x => x.Name.LocalName == "End_x0020_Use").FirstOrDefault();
                newEntry.approval_x0020_Type = (string)entry.Descendants().Where(x => x.Name.LocalName == "Approval_x0020_Type").FirstOrDefault();

                newEntry.links = entry.Elements(ns + "link").Select(x => x.Descendants().Where(y => y.Name.LocalName == "entry").Select(y => new Link() {
                   name = (string)y.Descendants().Where(z => z.Name.LocalName == "name").FirstOrDefault(),
                   id = (string)y.Descendants().Where(z => z.Name.LocalName == "id").FirstOrDefault(),
                   email = (string)y.Descendants().Where(z => z.Name.LocalName == "EMail").FirstOrDefault(),
                   title = (string)x.Attributes().Where(z => z.Name.LocalName == "title").FirstOrDefault()
                }).FirstOrDefault()
                ).ToList();
            }

        }

    }
    public class Entry
    {
        public static List<Entry> entries = new List<Entry>();

        public string title { get; set;}
        public string end_x0020_Use { get; set; }
        public string approval_x0020_Type { get; set; }
        public List<Link> links { get; set; }

    }
    public class Link
    {
        public string name { get; set; }
        public string id { get; set; }
        public string title { get; set; }
        public string email { get; set; }
    }

}

I would advise you to use $filter in your REST API call so that you would get a JSON result which is pretty much easy to work with. 我建议您在REST API调用中使用$filter ,这样您将获得一个非常容易使用的JSON结果。 The XML retrieval may fail sometimes. XML检索有时可能会失败。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM