[英]Get a list of ID Attributes from an XML File C#
我正在尝试从下面的 xml 文件中获取服务 ID 列表。
<Settings>
<SomeTag>Some inner text</SomeTag>
<Services ID="Downtown Location">
<Service ID="22923">Basic</Service>
<Service ID="22926">Basic + 2</Service>
<Service ID="22927">Basic + 3</Service>
<Service ID="22928">Basic + 4</Service>
<Service ID="22929">Basic + 5</Service>
</Services>
<MoreTags>
<ATag></ATag>
<ATag></ATag>
<ATag></ATag>
<ATag></ATag>
</MoreTags>
</Settings>
我尝试了几种我在网上找到的方法,但每种方法都有一些问题。 这是我最后一次尝试。
List<string> ServiceList = new List<string>();
XmlDocument xdoc = new XmlDocument();
xdoc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\Settings.xml");
XmlNodeList nodes = xdoc.DocumentElement.SelectNodes("/Services/Service");
foreach (XmlNode node in nodes)
{
ServiceList.Add(node.Attributes["ID"].Value);
}
return ServiceList;
在这种情况下,节点没有项目。 我已经尝试了 SelectNodes 的几种变体,但仍然没有项目。 早些时候我尝试过 XDocument 和一个 LINQ 查询。 我更愿意这样做,但我还没有找到一个收集 ID 的例子。
这是System.Xml.Linq
的示例:
static void Main(string[] args)
{
var xmldoc = System.Xml.Linq.XDocument.Load(@"YOUR FILE");
foreach (var name in xmldoc.Descendants("Services").Elements()
.Select(x => new { Name = x.Name, Value = x.Value, ID=x.Attribute("ID")
}))
{
Console.WriteLine(name.ID.Value);
}
Console.ReadLine();
}
输出:
22923
22926
22927
22928
22929
修复方法是删除此行中 XPath 表达式中的前导/
XmlNodeList nodes = xdoc.DocumentElement.SelectNodes("/Services/Service");
为你带来
XmlNodeList nodes = xdoc.DocumentElement.SelectNodes("Services/Service");
以/
开头的 XPath 表达式从文档的根开始搜索匹配的元素。 但是,您已经导航到文档元素并希望从那里开始搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.