在下面的xml中,我想通过matricule
查询xml,然后遍历HO elements
并将它们插入到.net列表中。
我尝试了以下代码,但它不起作用:
private List<Habilitation> GetAgents(string matricule)
{
List<Habilitation> haList = new List<Habilitation>();
IEnumerable<XElement> list = xdoc.XPathSelectElements("//agents/agent/data[matricule=matricule"]);
foreach (XElement ho in list)
{
Habilitation ha = new Habilitation();
ha.Matricule = (string)ho.Element("matricule");
ha.H_Domain = (string)ho.Parent.Element("questions").Element("H0").Element("H_Domain");
ha.H_Environment = (string)ho.Parent.Element("questions").Element("H0").Element("H_Environment");
ha.H_Mastered = (string)ho.Parent.Element("questions").Element("H0").Element("H_Mastered");
haList.Add(ha);
}
return haList;
}
XML
<agents xmlns="">
<agent>
<data>
<name>Agent1</name>
<matricule>123456</matricule>
</data>
<questions>
<H0>
<H_Domain>RAC Raccordement Basse Tension12</H_Domain>
<H_Environment>CPT travaux comptage12</H_Environment>
<H_Mastered>0</H_Mastered>
</H0>
<H0>
<H_Domain>IBT Intervention r�seau Basse Tension</H_Domain>
<H_Environment>TIA Travaux aux installations a�riennes</H_Environment>
<H_Mastered>1</H_Mastered>
</H0>
<H0>
<H_Domain>IBT Intervention r�seau Basse Tension</H_Domain>
<H_Environment>AEM Actes d'exploitation et man�uvre</H_Environment>
<H_Mastered>1</H_Mastered>
</H0>
</questions>
</agent>
<agent>
<data>
<name>Agent2</name>
<matricule>1234567</matricule>
</data>
<questions>
<H0>
<H_Domain>HTS Haute Tension Souterraine11111111555</H_Domain>
<H_Environment>AEM Actes d'exploitation et man�uvre</H_Environment>
<H_Mastered>1</H_Mastered>
</H0>
</questions>
</agent>
<agent>
<data>
<name>Agent3</name>
<matricule>1234568</matricule>
</data>
<questions>
<H0>
<H_Domain>IBT Intervention r�seau Basse Tension</H_Domain>
<H_Environment>TIA Travaux aux installations a�riennes</H_Environment>
<H_Mastered>0</H_Mastered>
</H0>
</questions>
</agent>
</agents>
答案 0 :(得分:0)
试试这段代码:
var node = doc.Descendants("agent").Elements("questions").Elements("H0");
答案 1 :(得分:0)
您可以尝试这种方式:
.....
var xpath = String.Format("//agents/agent[data/matricule='{0}']/questions/H0", matricule);
IEnumerable<XElement> list = xdoc.XPathSelectElements(xpath);
foreach (XElement ho in list)
{
Habilitation ha = new Habilitation();
ha.Matricule = matricule;
ha.H_Domain = (string)ho.Element("H_Domain");
ha.H_Environment = (string)ho.Element("H_Environment");
ha.H_Mastered = (string)ho.Element("H_Mastered");
haList.Add(ha);
}
.....
或使用LINQ创建List<Habilitation>
替换foreach
:
var haList = (from ho in xdoc.XPathSelectElements(xpath);
select select new Habilitation
{
Matricule = matricule,
H_Domain = (string)ho.Element("H_Domain"),
H_Environment = (string)ho.Element("H_Environment"),
H_Mastered = (string)ho.Element("H_Mastered")
}).ToList();