[英]how to query xml using linq or xpath
在下面的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>
試試這個代碼:
var node = doc.Descendants("agent").Elements("questions").Elements("H0");
您可以這樣嘗試:
.....
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.