C# LINQ和XmlNodes元素
我试图从这个XML返回属性值,它是从Sharepoint Webmethod调用的XmlNodes集合 XML数据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
<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;
}