gpt4 book ai didi

c# - LINQ 和 XmlNodes 元素

转载 作者:行者123 更新时间:2023-11-30 17:59:48 26 4
gpt4 key购买 nike

我正在尝试从此 XML 返回属性值,它是从 Sharepoint Web 方法调用的 XmlNode 的集合。

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>

我一直在遵循一些不同的指南,刚刚经历了 like this one on DiC ,我已经设法让这些示例发挥作用。

 public List<Dictionary<string, XmlAttribute>> GetListData(XmlNode collection)
{
#region Test
string nodeInput = Convert.ToString(collection.OuterXml);

TextReader sr = new StringReader(nodeInput);

//from <List> node, decendant of <Lists>
var lists = (from list in XElement.Load(sr).Descendants("List")
//where the baseType element value equals 0
where int.Parse(list.Element("BaseType").Value) == 0
//Output the titles values to a list
select list.Element("Title").Value).ToList();
}

#endregion

我一直在尝试根据我的数据调整一些示例,以便更好地了解它是如何工作的,但是这个查询没有返回任何与我预期不同的结果。我在评论的每一行旁边都写了我认为命令在做什么,有人能指出我的错误吗?


解决方案

一旦我知道 namespace 是问题所在,就很容易找到。

http://msdn.microsoft.com/en-us/library/bb669152.aspx与 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 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();

关于c# - LINQ 和 XmlNodes 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com