我一直在使用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>
答案 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 };
和libIds
是partIds
。您可以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
});