【问题标题】:get the values of child nodes with same name获取同名子节点的值
【发布时间】:2023-04-07 12:23:01
【问题描述】:
<photos items="5">
<path>
http://www.test1.com
</path>
<path>
http://www.test2.com
</path>
<path>
http://www.test3.com
</path>
<path>
http://www.test4.com
</path>
<path>
http://www.test5.com
</path>
</photos>

我正在尝试将所有 path 节点值放入一个列表中。

我尝试过这样的事情:

var nodes = (from n in xdoc.Descendants("photos")
             select n.Elements("path")).ToList();

在使用foreach 循环之后,我想将路径节点的每个值存储到一个列表中......但我不知道如何?还有其他更简单的解决方案吗?

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    这是你想要的吗:

                const string xml = @"
    <photos items=""5"">
    <path>
    http://www.test1.com
    </path>
    <path>
    http://www.test2.com
    </path>
    <path>
    http://www.test3.com
    </path>
    <path>
    http://www.test4.com
    </path>
    <path>
    http://www.test5.com
    </path>
    </photos>";
                var xdoc = XElement.Parse(xml);
                var paths = xdoc.Elements("path").Select(p => p.Value);
    

    如果xml来自具有上述架构的文件,您可以Load它:

            xdoc = XElement.Load("photos.xml");
            var paths = xdoc.Elements("path").Select(p => p.Value).ToList();
    

    【讨论】:

    • @FlorinM,我已经在答案中提供了更多细节。
    • 是否有其他解决方案无需对整个 xml 部分进行硬编码?
    • 当然,取决于您存储 xml 的位置 :) 那是一个 xml 文件吗?
    • 是xml文件,是的
    【解决方案2】:

    这似乎有效:

    var paths = xdoc.Descendants("photos").Elements("path").Select(p => p.Value);
    

    然后

    foreach( string p in paths)
    {
     /// get the urls in some list
    }
    

    【讨论】:

      【解决方案3】:

      您可以尝试以下方法:

      XDocument xdoc = XDocument.Load("full path to xml file");
      List<string> values = xdoc.Root.Elements("path").Select(p => p.Value.Trim()).ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-04
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        • 2016-10-09
        相关资源
        最近更新 更多