C#根据不需要的属性值列表从XMLDocument中删除整个元素

tec*_*ble 1 c# xpath xmldocument

我有一个XML文件,例如

<Bars1>
    <Bar name='0'>245</Bar>
    <Bar name='1'>180</Bar>
    <Bar name='2'>120</Bar>
    <Bar name='3'>60</Bar>
    <Bar name='4'>0</Bar>
</Bars1>
<Bars2>
    <Bar name='0'>25</Bar>
    <Bar name='1'>10</Bar>
    <Bar name='2'>10</Bar>
    <Bar name='3'>6</Bar>
    <Bar name='4'>0</Bar>
</Bars2>
<Gubbins3>
    <Bar name='0'>45</Bar>
    <Bar name='1'>18</Bar>
    <Bar name='2'>12</Bar>
    <Bar name='3'>4</Bar>
    <Bar name='4'>0</Bar>
</Gubbins3>
Run Code Online (Sandbox Code Playgroud)

和一个List<int>notNeededBarNames,包含例如{1,3}

我已经将XML文件加载到XmlDocumentxmlDoc中,并且想要删除任何"Bar"元素,其中属性"name"是我列表中的整数之一,无论它在XML中可能存在于何处.我的例子很小,但实际上文档和列表可能非常大.

这样做有一个很好的方法吗?我可以"蛮力"它,但我不禁觉得可能有更好的方法.

希望你能帮忙!

EZI*_*EZI 6

Linq2Xml可以让生活更轻松.

var notNeededBarNames = new List<int>() { 1, 3 };
var xDoc = XDocument.Load(filename);

xDoc.Descendants("Bar")
    .Where(bar => notNeededBarNames.Contains( (int)bar.Attribute("name")) )
    .Remove();

var newXml = xDoc.ToString();
Run Code Online (Sandbox Code Playgroud)