繁体   English   中英

从 XML 文件 C# 中获取 ID 属性列表

[英]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 的例子。

首先,我相信您错过了关闭“设置”标签是一个错字。 要使用 Linq to Xml 捕获 ID,您可以使用。

XElement xmlNode = XElement.Load(filePath);
var result = xmlNode.Descendants("Service").Select(x=>x.Attribute("ID").Value);

样本输出

在此处输入图片说明

这是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM