Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ和XmlNodes元素_C#_.net_Sharepoint_Linq To Xml - Fatal编程技术网

C# LINQ和XmlNodes元素

C# LINQ和XmlNodes元素,c#,.net,sharepoint,linq-to-xml,C#,.net,Sharepoint,Linq To Xml,我试图从这个XML返回属性值,它是从Sharepoint Webmethod调用的XmlNodes集合 XML数据 <Lists xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <List DocTemplateUrl="" DefaultViewUrl="/Lists/Announcements/AllItems.aspx" MobileDefaultViewUrl="" ID="{E6172717-E

我试图从这个XML返回属性值,它是从Sharepoint Webmethod调用的XmlNodes集合

XML数据

 <Lists xmlns="http://schemas.microsoft.com/sharepoint/soap/">

    <List DocTemplateUrl="" DefaultViewUrl="/Lists/Announcements/AllItems.aspx" MobileDefaultViewUrl="" ID="{E6172717-EB95-4845-B8CB-8161832565C6}" Title="Announcements" Description="Use the Announcements list to post messages on the home page of your site." ImageUrl="/_layouts/images/itann.gif" Name="{E6172717-EB95-4845-B8CB-8161832565C6}" BaseType="0" FeatureId="00bfea71-d1ce-42de-9c63-a44004ce0104" />


    <List DocTemplateUrl="" DefaultViewUrl="/Lists/Calendar/calendar.aspx" MobileDefaultViewUrl="" ID="{C0735477-BE48-4DDF-9D93-3E1F8E993CEC}" Title="Calendar" Description="Use the Calendar list to keep informed of upcoming meetings, deadlines, and other important events." ImageUrl="/_layouts/images/itevent.gif" Name="{C0735477-BE48-4DDF-9D93-3E1F8E993CEC}" BaseType="0" FeatureId="00bfea71-ec85-4903-972d-ebe475780106" />

///... Several more like this
    </Lists>
你的代码应该是

XNamespace ns = "http://schemas.microsoft.com/sharepoint/soap/";

var lists = (from list in XElement.Parse(nodeInput).Descendants(ns + "List")
             where (int)list.Attribute(ns + "BaseType") == 0
             select (string)list.Attribute(ns + "Title")).ToList();

解决方案

一旦我知道名称空间是问题所在,就很容易找到

与VB不同,C#需要名称空间,即使节点没有前缀

所以我需要一个
XNamespace

    XNamespace nameSpace = "http://schemas.microsoft.com/sharepoint/soap/";
    XElement node = XElement.Parse(nodeInput);

    var lists = from list in node.Descendants(nameSpace + "List")
                select list;
    foreach (var list in lists)
    {
        var doc = list.Document;
    }
    XNamespace nameSpace = "http://schemas.microsoft.com/sharepoint/soap/";
    XElement node = XElement.Parse(nodeInput);

    var lists = from list in node.Descendants(nameSpace + "List")
                select list;
    foreach (var list in lists)
    {
        var doc = list.Document;
    }

XML显示了一个名称空间,但从未使用过名称空间。我希望您在当前代码中找不到任何
列表
元素……谢谢,现在已经阅读了xml名称空间。通过
XElement
XDocument
友好、更干净地解析
XmlNode
的方法是在
XElement节点上使用
XmlNodeReader
,例如
XElement节点;使用(XmlReader xr=new XmlNodeReader(collection)){node=XElement.Load(xr);}…
@Martin我很感激这个提示,谢谢。
    XNamespace nameSpace = "http://schemas.microsoft.com/sharepoint/soap/";
    XElement node = XElement.Parse(nodeInput);

    var lists = from list in node.Descendants(nameSpace + "List")
                select list;
    foreach (var list in lists)
    {
        var doc = list.Document;
    }