我遇到查询xml并获取正确值的问题。 我有这个xml文件
<A id="a">
<B id="b"></B>
<C id="c1">
<E id="e"></E>
<F id="f1"></F>
<F id="f2"></F>
<F id="f3"></F>
<G id="g"></G>
</C>
<C id="c2">
<E id="e"></E>
<F id="f1"></F>
<F id="f2"></F>
<F id="f3"></F>
<G id="g"></G>
</C>
<C id="c3">
<E id="e"></E>
<F id="f1"></F>
<F id="f2"></F>
<F id="f3"></F>
<G id="g"></G>
</C>
<D id="d"></D>
</A>
我想在C#中进行查询,选择f2的所有内容,但忽略F兄弟姐妹和C兄弟姐妹。 我希望得到这个结果
<A id="a">
<B id="b"></B>
<C id="c2">
<E id="e"></E>
<F id="f2"></F>
<G id="g"></G>
</C>
<D id="d"></D>
</A>
对此的任何帮助都表示赞赏。
答案 0 :(得分:0)
您将需要使用Linq-To-Xml:
XElement root = XElement.Load(file);
// Find the node you want to start the process on
XElement node = root.Descendants("F")
.FirstOrDefault(x => (string)x.Attribute("id") == "f2"
&& (string)x.Parent.Attribute("id") == "c2");
// Then iteratively remove similar named nodes recursively up the tree
XElement parent = node.Parent;
while (parent != null)
{
var list = parent.Elements(node.Name)
.Where(x => (string)x.Attribute("id") != (string)node.Attribute("id"))
.ToList();
list.ForEach(x => x.Remove());
node = parent;
parent = parent.Parent;
}
XElement result = root;
结果:
<A id="a">
<B id="b"></B>
<C id="c2">
<E id="e"></E>
<F id="f2"></F>
<G id="g"></G>
</C>
<D id="d"></D>
</A>