0

我相信所有的专业人士都会觉得这很简单,但我需要在 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);
}

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

4

2 回答 2

2

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

var xml = XElement.Parse(xmlString);
var names=xml.Elements().Attributes(@"Name").Select(attrib => attrib.Value);
于 2014-05-05T09:13:49.990 回答
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*/
}
于 2014-05-05T09:08:29.190 回答