首页 > 解决方案 > 使用 C# 按属性名称搜索 XML 值

问题描述

我有一个 XML 文件,例如:

<ListOfMegaCities>                
    <MegaCities city="Moscow" residents="11503501" foundation="1624"/>
    <MegaCities residents="8336817" city="New York" foundation="1147"/>
    <MegaCities foundation="1066"  residents="8961989" city="London"/>
</ListOfMegaCities>

我想在每一行中搜索像“city”这样的属性名称并解析像“New York”这样的值。在 xml 文件中,值 + 属性的顺序应该无关紧要。

我知道它看起来很简单......但我不明白。

我尝试如下:

strCityValue = ChildNodes[iIndex].Attributes[1].Value;

但是对于这个解决方案,值的顺序必须在 xml 文件中固定......

标签: c#xml

解决方案


.GetAttribute(...)是你的朋友; 例如:

var doc = new XmlDocument();
doc.LoadXml(@"<ListOfMegaCities>
    <MegaCities city=""Moscow"" residents=""11503501"" foundation=""1624""/>
    <MegaCities residents=""8336817"" city=""New York"" foundation=""1147""/>
    <MegaCities foundation=""1066""  residents=""8961989"" city=""London""/>
</ListOfMegaCities>");
foreach (XmlElement city in doc.DocumentElement.SelectNodes("MegaCities"))
{
    Console.WriteLine(city.GetAttribute("city"));
}

XDocument, .Attribute(...):

var doc = XDocument.Parse(@"<ListOfMegaCities>
    <MegaCities city=""Moscow"" residents=""11503501"" foundation=""1624""/>
    <MegaCities residents=""8336817"" city=""New York"" foundation=""1147""/>
    <MegaCities foundation=""1066""  residents=""8961989"" city=""London""/>
</ListOfMegaCities>");
foreach (XElement city in doc.Root.Elements("MegaCities"))
{
    Console.WriteLine((string)city.Attribute("city"));
}

推荐阅读