这是Xml
<ItemWarehouseInfo>
<row>
<MinimalStock>0.000000</MinimalStock>
<MaximalStock>0.000000</MaximalStock>
<MinimalOrder>0.000000</MinimalOrder>
<StandardAveragePrice>0.000000</StandardAveragePrice>
<Locked>tNO</Locked>
<WarehouseCode>Mc</WarehouseCode>
<DefaultBinEnforced>tNO</DefaultBinEnforced>
</row>
...other equal lines
</ItemWarehouseInfo>
我必须从每个行节点中删除所有子节点,除了WarehouseCode节点。我尝试了这个方法,但显然我错了,什么也没改变:
XDocument xdoc = XmlHelper.LoadXDocFromString(xmlOITM);
XElement magaRow = xdoc.Root.Descendants(Constants.Articoli.ART_MAGA_NODES).FirstOrDefault();//ItemWarehouseInfo node
List<XElement> row = magaRow.Elements().ToList();//row node
foreach(XElement child in row.Elements())
{
if (child.Name != "WarehouseCode")
{
child.Remove();
}
}
这就是我所期望的最终结果:
<ItemWarehouseInfo>
<row>
<WarehouseCode>Mc</WarehouseCode>
</row>
...other equal lines
</ItemWarehouseInfo>
3条答案
按热度按时间daupos2t1#
说明:
doc.Descendants("row")
-查找所有行元素,无论其深度如何。Elements()
-获取所有直接子元素Where()
-获取名称不是WarehouseCode
的所有元素Remove()
-删除所有找到的元素wmtdaxz32#
你不需要为每一行调用
.Elements()
,你已经得到了元素列表:brgchamk3#
获取行,删除它。创建新行,添加该行的WarehouseCode,然后将该行添加到magaRow。如果这样做不起作用,我怀疑是命名空间导致了问题。