c#-3.0 - Linq to XML 文档遍历

标签 c#-3.0 linq-to-xml

我有一个像这样的 xml 文档:

<?xml version="1.0" encoding="utf-8" ?>
<demographics>
    <country id="1" value="USA">
        <state id ="1" value="California">
            <city>Long Beach</city>
            <city>Los Angeles</city>
            <city>San Diego</city>
        </state>
        <state id ="2" value="Arizona">
            <city>Tucson</city>
            <city>Phoenix</city>
            <city>Tempe</city>
        </state>
    </country>
    <country id="2" value="Mexico">
        <state id ="1" value="Baja California">
            <city>Tijuana</city>
            <city>Rosarito</city>            
        </state>
    </country>
</demographics> 

如何设置 LINQ 查询来执行以下操作: 1. 获取所有国家 2. 获取一个国家的所有州 3. 获取特定国家/地区某个州内的所有城市?

我尝试了一下,但我有点困惑何时使用 Elements["NodeName"] 和 Descendants 等。我知道我不是最聪明的 XML 专家。 XML 文件的格式对于简单遍历来说是否正确?

最佳答案

从文件加载文档:

XDocument document = XDocument.Load("input.xml");

要获取所有国家/地区的名称:

IEnumerable<string> countries = document
    .Descendants("country")
    .Select(element => element.Attribute("value").Value);

要获取“美国”国家/地区内的所有州:

IEnumerable<string> states = document
    .Descendants("country")
    .Where(element => element.Attribute("value").Value == "USA")
    .Elements("state")
    .Select(element => element.Attribute("value").Value);

要获取美国/加利福尼亚州境内的所有城市:

IEnumerable<string> cities = document
    .Descendants("country")
    .Where(element => element.Attribute("value").Value == "USA")
    .Elements("state")
    .Where(element => element.Attribute("value").Value == "California")
    .Elements("city")
    .Select(element => element.Value);

您可能还想查看 XPath 查询(您需要使用 System.XML.XPath):

IEnumerable<string> cities = document
    .XPathSelectElements("/demographics/country[@value='USA']/state[@value='California']/city")
    .Select(element => element.Value);

关于c#-3.0 - Linq to XML 文档遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710580/

相关文章:

c# - 添加扩展方法的方法?

c# - 如何取消订阅使用 lambda 表达式的事件?

c# - 使用选项卡格式化 XElement

xhtml - 使用 XDocument 通过 DTD 解析 XHTML

c# - 如何使用 XElement 在标签之间添加值?

c# - 查找数组或 XML 中值的频率 (C#)

C# 简单应用程序会产生大量页面错误。为什么?

c# - 如何使用 .NET 获取月份的最后一个星期五

c# - if else 语句和 while 循环

c# - 添加 x :Key attribute using Linq to Xml