我有一个XML文件,结构如下:
<deftable>
<table>
<job jobname="">
<incond name="" />
<outcond name="" />
</job>
<job jobname="">
<incond name="" />
<outcond name="" />
<incond name="" />
<outcond name="" />
</job>
</table>
<table>
<job jobname="">
<incond name="" />
<outcond name="" />
</job>
<job jobname="">
<incond name="" />
<outcond name="" />
<incond name="" />
<outcond name="" />
</job>
</table>
</deftable>
标签内的deftable我可以有多个表。 在表格标签中我可以有多个JOB,在那些我有多个incond和outcond。
我试图获取jobname的值,以及incond和outcond的name属性的值。
我已经尝试了几种方法来实现这一目标。我尝试过的最新事情就是这个,但我似乎无法让它发挥作用。
XmlDocument doc = new XmlDocument();
doc.Load(file);
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/deftable/table");
int i = 1;
foreach (XmlNode node in nodes)
{
Console.WriteLine(node["job"].GetAttribute("jobname") + " -- " + i);
i++;
XmlNodeList nodes2 = doc.DocumentElement.SelectNodes("/deftable/table/job");
foreach (XmlNode item in nodes2)
{
Console.WriteLine(item["incond"].GetAttribute("name"));
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
我不确定以下代码段对您有多大帮助,但您可以针对您的情况尝试使用Linq to Xml,如下所示。
XDocument jobsRoot = XDocument.Load(@"C:\Jobs.xml");
var jobData= jobsRoot.Descendants()
.Where(it => it.Name.LocalName == "job")
.Select(job => new
{
JobName = job.Attribute("jobname").Value,
IncondName = job.Descendants().Where(it => it.Name.LocalName == "incond").Select(inc => inc.Attribute("name").Value),
OutcondName = job.Descendants().Where(it => it.Name.LocalName == "outcond").Select(inc => inc.Attribute("name").Value)
});
答案 1 :(得分:0)
我认为linq to XML实现没有XML到Dynamic
那么好在Deserialize XML To Object using Dynamic上描述(因为你提到过你尝试了几种方法)。另外,上面的答案可能会这样做。