我有以下xml文件:
<ArrayOfNO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<No>
<Id>0</Id>
<Name>txt_0</Name>
<Texto>Função 0</Texto>
<Txt_relacionados>
<string>txt_1</string>
<string>txt_2</string>
</Txt_relacionados>
<Nível>2</Nível>
<X>393</X>
<Y>55</Y>
</No>
<No>
<Id>0</Id>
<Name>txt_1</Name>
<Texto>Função 0</Texto>
<Txt_relacionados>
<string>txt_0</string>
</Txt_relacionados>
<Nível>1</Nível>
<X>234</X>
<Y>115</Y>
</No>
<No>
<Id>1</Id>
<Name>txt_2</Name>
<Texto>Função 1</Texto>
<Txt_relacionados>
<string>txt_0</string>
</Txt_relacionados>
<Nível>1</Nível>
<X>234</X>
<Y>115</Y>
</No>
</ArrayOfNO>
我希望在删除元素时(例如"txt2"
),程序会在所有元素的<Txt_relacionados>
中查找是否有与"txt_2"
相关的项目,以及是否真的删除。
我已使用以下代码删除了该项目(正在运行):
public void remove(String name)
{
RefreshXDoc();
var oEmp = doc.Descendants().Elements("No")
.Where(d => d.Element("Name").Value == name)
.FirstOrDefault();
if (oEmp == null)
{
return;
}
oEmp.Remove();
SaveXDoc();
}
但首先需要删除列表中的所有项目&#34; txt_relacionados&#34;与其相关的其他元素(不知道如何实现)。我试过这样的事情:
var oEmp = doc.Descendants("No").Elements("Txt_relacionados")
.Where(d => d.Element("string").Value == name)
.ToList();
oEmp.Remove();
SaveXDoc();
有人有建议吗? 谢谢!
答案 0 :(得分:2)
您可以尝试这种方式删除<string>
中价值等于<Txt_relacionados>
的所有name
元素:
doc.Descendants("No")
.Elements("Txt_relacionados")
.Elements("string")
.Where(s => (string)s == name)
.Remove();
SaveXDoc();
此处不需要ToList()
,您可以直接调用扩展方法.Remove()
,因为该方法defined for IEnumerable<XNode>
source。
答案 1 :(得分:0)
首先从xml结构中删除节点,然后保存新的xml结构:
foreach (var node in oEmp)
{
node.ParentNode.RemoveChild(oEmp);
}
SaveXDoc();