Lea los nodos parentales solo de XML usando Linqtoxml
-
23-09-2019 - |
Pregunta
Tengo una cadena XML que tiene "Comité" nodos matriz y dentro de ese "Comité" del nodo infantil está ahí. Cuando estoy usando "from committee in xDocument.DescendantsAndSelf("Committee")
"También está leyendo ChildNode, pero no quiero leer los nodos infantiles, solo quiero leer solo los nodos de los padres.
<Committee>
<Position>STAFF</Position>
<Appointment>1/16/2006</Appointment>
<Committee>PPMSSTAFF</Committee>
<CommitteeName>PPMS Staff</CommitteeName>
<Expiration>12/25/2099</Expiration>
</Committee>
<Committee>
<Position>STAFF</Position>
<Appointment>4/16/2004</Appointment>
<Committee>PMOSSTAFF</Committee>
<CommitteeName>PPMS </CommitteeName>
<Expiration>12/25/2099</Expiration>
</Committee>
XElement xDocument= XElement.Parse(xml);
var committeeXmls = from Committee in xDocument.Descendants("Committee")
select new
{
CommitteeName = Committee.Element("CommitteeName"),
Position = Committee.Element("Position"),
Appointment = Committee.Element("Appointment"),
Expiration = Committee.Element("Expiration")
};
int i = 0;
foreach (var committeeXml in committeeXmls)
{
if (committeeXml != null)
{
drCommittee = dtCommittee.NewRow();
drCommittee["ID"] = ++i;
drCommittee["CommitteeName"] = committeeXml.CommitteeName.Value;
drCommittee["Position"] = committeeXml.Position.Value;
drCommittee["Appointment"] = committeeXml.Appointment.Value;
drCommittee["Expiration"] = committeeXml.Expiration.Value;
dtCommittee.Rows.Add(drCommittee); // educationXml.GraduationDate.Value, educationXml.Major.Value);
}
}
No hay solución correcta
Otros consejos
Utilizar el Elements
método en lugar de Descendants
.
Cambia esto:
from Committee in xDocument.Descendants("Committee")
A esto:
from Committee in xDocument.Elements("Committee")
Esto devolverá al niño Committee
elementos del elemento actual (xDocument
variable).
Puede usar el método de extensión XPathSelectelements (en el espacio de nombres System.xml.xpath) para seleccionar solo aquellos elementos del comité que tienen un elemento infantil del comité.
var committeeXmls = from Committee in xDocument.XPathSelectElements("Committee[Committee]")
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow