C# 使用c读取XML文件时遇到问题#
我有一个结构如下的XML文件:C# 使用c读取XML文件时遇到问题#,c#,xml,xpath,C#,Xml,Xpath,我有一个结构如下的XML文件: <deftable> <table> <job jobname=""> <incond name="" /> <outcond name="" /> </job> <job jobname="">
<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>
非常感谢您的帮助。我不确定下面的代码片段对您有多大帮助,但您可以针对您的案例进行尝试,如下所示
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)
});
我认为linq到XML的实现不如XML到动态
上面有描述(因为您提到您尝试了几种方法)。否则,上面的答案可能就可以了。您是否使用调试器进行了调试?输出是什么?预期产量是多少?关于代码的哪一部分不起作用,你有什么线索吗?这是一个在线xpath测试仪,你给它一个文档和一个xpath:从中我推断你需要两个斜杠,如
//deftable/table
中所示,来了解如何进行。看起来你没有深入到循环中的子节点。谢谢大家的帮助。我使用两个foreach和reading-childnode访问了我想要的属性。@AlwaysLearning发布的链接真的很有帮助,我以前看过,但第一次我没有完全理解。非常感谢。
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)
});