Действительно новый для LINQ и XML. Я надеялся, что кто-то скажет мне, что я делаю неправильно, пытаясь удалить дочерний узел из XElement.Удалить дочерний узел XML из родителя с предложением where
Вот пример моего XML: (Я пытаюсь удалить «Relation», что соответствует выбранному пользователю соотношение)
<Bill>
<Element>
<Name>AccountNumber</Name>
<Regex></Regex>
<Left></Left>
<Right></Right>
<Top></Top>
<Bottom></Bottom>
<Index>0</Index>
<Relations></Relations>
</Element>
<Element>
<Name>BillDate</Name>
<Regex></Regex>
<Left></Left>
<Right></Right>
<Top></Top>
<Bottom></Bottom>
<Index>1</Index>
<Relations>
<Relation>AccountNumber.RightOf.Right.0</Relation>
<Relation>AccountNumber.Below.Top.-10</Relation>
<Relation>AccountNumber.Above.Bottom.-10</Relation>
</Relations>
</Element>
если моему WPF GUI, когда пользователь нажимает удалить на Я хочу удалить только это отношение из родителя.
Это одна из многих вещей, которые я попробовал:
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
List<RelationsDetailView> details = (List<RelationsDetailView>)DetailsView.ItemsSource;
XElement parentElement = (from Node in ocrVar.Xml.Descendants("Element")
where Node.Element("Index").Value == ocrVar.SelectedItem.Index.ToString()
select Node).FirstOrDefault();
XElement child = parentElement.Element("Relations").Elements("Relation").Where(xel => xel.Element("Relation").Value == (details[DetailsView.SelectedIndex].Relation)).FirstOrDefault();
child.Remove();
ocrVar.Xml.Save(ocrVar.xmlPath);
}
Отлично, спасибо, что объяснил это. Кроме того, немного советов о предотвращении исключения NullReferenceException. – Milne
Добро пожаловать. Вы также можете использовать 'XElement' для' int' и изменить свое первое условие запроса на 'where (int) Node.Element (" Index ") == ocrVar.SelectedItem.Index' – MarcinJuraszek
Хороший вызов. Я предполагаю, что лучше приложить что-то к int и сравнить ints, чем отличить другую как строку и сравнить две строки? Просто любопытно. – Milne