gpt4 book ai didi

c# - 使用 where 子句从父节点中删除子 XML 节点

转载 作者:太空宇宙 更新时间:2023-11-03 20:09:39 25 4
gpt4 key购买 nike

对 LINQ 和 XML 来说真的很新。我希望有人能告诉我我在尝试从 XElement 中删除子节点时做错了什么。

这是我的 XML 示例:(我正在尝试删除与用户选择的关系相对应的“关系”)

<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);
}

最佳答案

你的 Where谓词不正确。 xel已经是 <relation>元素,因此您不必调用 Element("Relation")再次。

您还应该替换 XElement.Value(string)XElement防止NullReferenceException .

.Where(xel => (string)xel == (details[DetailsView.SelectedIndex].Relation))

或者您可以使用 FirstOrDefault用谓词代替 Where().FirstOrDefault()链:

XElement child = parentElement.Element("Relations").Elements("Relation").FirstOrDefault(xel => (string)xel == details[DetailsView.SelectedIndex].Relation);

关于c# - 使用 where 子句从父节点中删除子 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20909620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com