我有一个像这样的 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/