我有一个XMl文件,它具有以下结构:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlashMemory>
<FlashItems>
<FlashItem>
<Keyword KID="1234">XY</Keyword>
<Header Version="1">XY</Header>
<Gap DivisibleBy="8">XY</Gap>
<Datatype DID="12345">XY</Datatype>
<Length>2</Length>
<ProductionSteps>
<ProductionStep>
<Step>XY</Step>
<Source>XY</Source>
<Value>XY/Value>
<DocTarget>
<Target>None</Target>
</DocTarget>
</ProductionStep>
</ProductionSteps>
</FlashItem>
<FlashItem>
.
.
.
</FlashItem>
</FlashItems>
</FlashMemory>
我想删除<Step>
值等于某个值的所有<FlashItem></FlashItem>
节点。我尝试使用LINQ,但查询的结果总是null
。
XDocument xmlDoc = XDocument.Load("test.xml");
xmlDoc.Descendants("FlashItems")
.Elements("FlashItem")
.Elements("ProductionSteps")
.Elements("ProductionStep")
.Elements("Step")
.Where(x => x.Value == "testvalue").Remove();
在C#中有什么建议吗?
更新:
var nodes = xmlDoc.Descendants("FlashItem");
var x = (from element in nodes
where element.Element("ProductionSteps")
.Element("ProductionStep")
.Element("Step").Value == "HecuProduction"
select element);
foreach (var query in x)
{
query.Element("Flashitem").Remove();
}
在本例中,选择是有效的,我需要删除的所有节点都在x
中,但是当我尝试删除时,我得到了一个空引用异常。
1条答案
按热度按时间s8vozzvw1#
您的代码实际上是有效的...但是您没有删除要访问的父节点-您删除的是步骤节点本身。
给予看: