读取XML文档中的所有根节点名称

时间:2014-05-05 08:57:45

标签: c# xml sharepoint-2010 csom

我确信那里的所有专业人员都会发现这非常微不足道但我需要在C#中快速解决这个问题

我正在检索共享点中视图的xml架构,如下所示:

<FieldRef Name="LinkTitle"/><FieldRef Name="Author0"/><FieldRef Name="ID"/>

我想解析它,只检索此模式中每个根元素的名称。 目前这是我正在处理的代码,需要一些帮助

String fieldvals = view.ViewFields.SchemaXml.ToString();
XmlDocument reader = new XmlDocument(); ;
reader.LoadXml(fieldvals);
String xpath = "/";
var nodes = reader.SelectNodes(xpath);

foreach (XmlNode childrenNode in nodes)
{
    Console.WriteLine(childrenNode.SelectSingleNode("//field1").Value);
}

显然,当这段代码执行时,我得到一个例外,说存在多个根节点,当然这是真的......但是我无法找出正确的代码来访问每个根节点和提取它的名字!

2 个答案:

答案 0 :(得分:2)

将xml片段包装在根节点中,然后您可以使用linq to xml来检索这些名称的字符串数组,如下所示:

var xml = XElement.Parse(xmlString);
var names=xml.Elements().Attributes(@"Name").Select(attrib => attrib.Value);

答案 1 :(得分:0)

您应该将xml包装在某个根节点中,因为XML只能有一个根节点,如下所示:

<FieldRefs>
    <FieldRef Name="LinkTitle"/>
    <FieldRef Name="Author0"/>
    <FieldRef Name="ID"/>
</FieldRefs>

然后您的代码将执行正常。

String fieldvals = view.ViewFields.SchemaXml.ToString();
XmlDocument reader = new XmlDocument(); ;
reader.LoadXml(fieldvals);
String xpath = "/FieldRefs/FieldRef";
var nodes = reader.SelectNodes(xpath);

foreach (XmlNode childrenNode in nodes)
{
    /*Process here*/
}