C#XML foreach元素?

时间:2016-12-19 22:47:32

标签: c# xml

我一直在使用C#,并且想知道找到<lib>的每个id的最简单方法是什么?,我真的是C#本身的新手,特别是XML,所以我很感激一些帮助。< / p>

C#

var xmlData = client.DownloadString(figureMapUrl);
var doc = XDocument.Parse(xmlData);

XML:

<map>
    <lib id="myid1" revision="1">
        <part id="2732" type="ch"/>
        <part id="2732" type="ls"/>
        <part id="2732" type="rs"/>
        <part id="2733" type="ch"/>
    </lib>
    <lib id="myid2" revision="2">
        <part id="2732" type="ch"/>
        <part id="2732" type="ls"/>
        <part id="2732" type="rs"/>
        <part id="2733" type="ch"/>
    </lib>
</map>

4 个答案:

答案 0 :(得分:0)

您正在寻找LINQ to XML。我自己并没有尝试过这段代码,但从我的脑海中我会想到的是:

     C        gamma   kernel  mean  std.dev
42  8.0     0.000488    rbf 0.96268 0.00754
47  8.0     0.500000    rbf 0.96825 0.00581
50  32.0    0.000031    rbf 0.94883 0.00776
52  32.0    0.000488    rbf 0.96518 0.00668
64  128.0   0.007812    rbf 0.97031 0.00631
67  128.0   0.500000    rbf 0.96369 0.00713
73  512.0   0.001953    rbf 0.96898 0.00611
76  512.0   0.125000    rbf 0.96602 0.00700
79  512.0   8.000000    rbf 0.96560 0.00488
105 32768.0 0.031250    rbf 0.96455 0.00561

现在// getting first level ids using LINQ to XML var libIds = from lib in doc.Descendants("lib") select new { id = lib.Attribute("id").Value }; // getting second level ids using LINQ to XML var partIds = from lib in doc.Descendants("lib") from part in lib.Descendants("part") select new { value = part .Attribute("id").Value }; libIdspartIds。您可以IEnumerable<string>将其转换为列表。

修改

这就是你如何迭代id:

.ToList()

答案 1 :(得分:0)

更多基于XML的方法看起来像这样。 这里不需要POCO。

XmlDocument xml = new XmlDocument();
xml.loadXML( strXMLString );
foreach( XmlElement ndLib in xml.selectNodes( "//lib" ) ) {
    string strID = ndLib.getAttribute( "id" );
    string strRevision = ndLib.getAttribute( "revision" );
}

答案 2 :(得分:0)

试试xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            var results = doc.Descendants("lib").Select(x => new
            {
                id = (string)x.Attribute("id"),
                revision = (int)x.Attribute("revision"),
                parts = x.Elements("part").Select(y => new
                {
                    id = (int)y.Attribute("id"),
                    type = (string)y.Attribute("type")
                }).ToList()
            }).ToList();

            foreach (string id in results.Select(x => x.id).ToArray())
            {
            }

            foreach (var part in results.Select(x => x.parts))
            {
                foreach (int id in part.Select(y => y.id).ToArray())
                {
                }
            }
        }
    }
}

答案 3 :(得分:0)

使用LINQ to XML,您可以执行以下操作:

var xmlData = client.DownloadString(figureMapUrl);
var doc = XDocument.Parse(xmlData);

var idList = doc.Descendants("lib").Select(el => el.Attribute("id").Value).Union(
             doc.Descendants("part").Select(el => el.Attribute("id").Value))
             .ToList();

额外:如果你想避免重复:

var idList = doc.Descendants("lib").Select(getId).Union(
             doc.Descendants("part").Select(getId))
             .ToList();

string getId(XElement el) => el.Attribute("id").Value;

要遍历这个,你可以做一个常规的for循环:

foreach(var id in idList)
{
    // Do something with ID here
}

或者,您可以使用ForEach并完全删除变量:

doc.Descendants("lib").Select(getId).Union(
doc.Descendants("part").Select(getId))
   .ToList()
   .ForEach(id => {
      // Do something with id here
   });