Прочитайте родительские узлы только из XML с использованием linqtoxml
-
23-09-2019 - |
Вопрос
У меня есть строка XML, которая имеет родительские узлы «комитет», и внутри этого есть еще один детский комитет «комитет». Когда я использую "from committee in xDocument.DescendantsAndSelf("Committee")
«Это также чтение ChildNode, но я не хочу читать детские узлы, я просто хочу читать только родительские узлы.
<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);
}
}
Нет правильного решения
Другие советы
Использовать Elements
Метод вместо Descendants
.
Измените это:
from Committee in xDocument.Descendants("Committee")
К этому:
from Committee in xDocument.Elements("Committee")
Это вернет ребенка Committee
элементы текущего элемента (xDocument
переменная).
Вы можете использовать метод расширения xPathSelectelements (в System.xml.xpath пространство имен), чтобы выбрать только те элементы комитета, которые имеют детский элемент комитета.
var committeeXmls = from Committee in xDocument.XPathSelectElements("Committee[Committee]")
...
Не связан с StackOverflow