0

我整个早上都在尝试,但似乎无法正常工作。我有一个如下的 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<Details>
  <cityItems>
    <city>Amsterdam</city>
    <city>New York</city>
  </cityItems>
  <streetItems>
    <street>Mainstreet</street>
    <street>Secondstreet</street>
  </streetItems>
</Details>

我试图让输出有点像这样;

string[] cities = { "Amsterdam", "New York" };
string[] streets = { "Mainstreet", "Secondstreet" };

街道和城市没有相互联系或任何东西。我似乎无法在互联网上找到正确的示例来使其正常工作。

你能帮我或指出我正确的方向吗?谢谢。

4

2 回答 2

2

我已经更改了您的 xml,以便它具有正确的关闭节点</cityItems>

var xml = XDocument.Parse(str);

Func<string, string[]> readAllCities = 
                            nodeName => 
                                     xml.Descendants(nodeName)
                                        .SelectMany(node => node.Elements("city")
                                                                .Select(v => v.Value))
                                        .ToArray();


string[] streets  = readAllCities("streetItems");
string[] cities  = readAllCities("cityItems");

我将保留旧版本的代码副本,以便您可以选择更好的版本并将其更舒适地集成到您的解决方案中

string[] cities = xml.Descendants("cityItems")
                     .SelectMany(node => node.Elements("city")
                                             .Select(v => v.Value))
                     .ToArray();


string[] strets = xml.Descendants("streetItems")
                     .SelectMany(node => node.Elements("city")
                                             .Select(v => v.Value))
                     .ToArray();
于 2013-03-22T11:08:58.323 回答
0

我猜你需要使用 LINQ to XML 并将结果循环到数组中。这里有一些东西可以为你指明正确的方向

    XDocument xdoc = XDocument.Load("data.xml");

   //Run query
    var lv1s = from lv1 in xdoc.Descendants("level1")
       select new { 
           Header = lv1.Attribute("name").Value,
           Children = lv1.Descendants("level2")
       };
于 2013-03-22T11:12:21.687 回答