XDocument descendants
本文关键字:descendants XDocument | 更新日期: 2023-09-27 17:50:48
<?xml version="1.0" encoding="ISO-8859-1"?>
<kdd>
<Table>
<robel ID="1">
<groof NAME="GOBS-1">
<sintal ID="A">Cynthia1</sintal>
<sintal ID="B">Sylvia2</sintal>
<sintal ID="C">Sylvia3</sintal>
<sintal ID="D">Sylvia4</sintal>
</groof>
<groof NAME="GOBS-2">
<sintal ID="A">Cynthia1</sintal>
<sintal ID="B">Cynthia2</sintal>
<sintal ID="C">Cynthia3</sintal>
<sintal ID="D">Cynthia4</sintal>
</groof>
<groof NAME="GOBS-3">
<sintal ID="A">Daniella1</sintal>
<sintal ID="B">Daniella2</sintal>
<sintal ID="C">Daniella3</sintal>
<sintal ID="D">Daniella4</sintal>
</groof>
</robel>
</Table>
</kdd>
我想获得GOBS-2的Cynthia1。注意,GOBS-1
中有另一个Cynthia1。foreach (XElement element in doc.Descendants("groof"))
{
string mmname = element.Attribute("NAME").Value.ToString();
if (mmname == "GOBS-2")
{
bool found = false;
foreach (XElement element1 in doc.Descendants("sintal"))
{
if (found == false)
{
string CurrentValue = (string)element1;
if ("Cynthia1" == CurrentValue)
{
try
{
//do something
found = true;
}
catch (Exception e)
{
}
}
}
}
}
问题是,在它从Gobs-2中找到Cynthia1之后,循环上升到Gobs-1。我认为对于sintal的第二个foreach有问题也许我应该用别的东西。我希望在它找到Gobs-2的sintal后,它停止寻找。看来这两个人并没有什么关系。独立运行
我想获得GOBS-2的Cynthia1
你可以使用Linq更精确地到达那里:
XElement cynthia = doc
.Descendants("groof")
.Where(g => g.Attribute("NAME").Value == "GOBS-2")
.Elements("sintal")
.Where(s => s.Value == "Cynthia1") // or Attribute("ID") == "A"
.Single();
你在内部foreach循环中有一个错误,你应该迭代element.Descendants("sintal")
而不是doc.Descendants("sintal")
foreach (XElement element in doc.Descendants("groof"))
{
string mmname = element.Attribute("NAME").Value.ToString();
if (mmname == "GOBS-2")
{
bool found = false;
foreach (XElement element1 in element.Descendants("sintal"))
{
if (found == false)
{
string CurrentValue = (string)element1;
if ("Cynthia1" == CurrentValue)
{
try
{
//do something
found = true;
}
catch (Exception e)
{
}
}
}
}
}
}
您从第一个groof
标记获得sintal
元素的原因是doc.Descendants("sintal")
查找文档中的第一个sintal标记,而不是您之前选择的父节点。