Paw*_*anS 7 c# xml linq linq-to-xml
如何根据匹配的属性值删除xml中的任何元素?
这是我的XML:
<Projects>
<Project serverUrl="tcp://xyz1:xxx/sdfsdf.rem" projectName="project1" />
<Project serverUrl="tcp://xyz2:xxx/sdfsdf.rem" projectName="project2" />
<Project serverUrl="tcp://xyz3:xxx/sdfsdf.rem" projectName="project3" />
<Project serverUrl="tcp://xyz4:xxx/sdfsdf.rem" projectName="project4" />
<Project serverUrl="tcp://xyz5:xxx/sdfsdf.rem" projectName="project5" />
<Project serverUrl="tcp://xyz6:xxx/sdfsdf.rem" projectName="project6" />
</Projects>
Run Code Online (Sandbox Code Playgroud)
我使用以下LINQ查询:
var remove = from elemet in xdoc.Elements("Projects").Elements("Project")
where elemet.Attribute("projectName").Value == "project1"
select elemet.Parent.Remove();
Run Code Online (Sandbox Code Playgroud)
我在select上得到编译时错误:
select子句中的表达式类型不正确
编辑答案:这个对我有用.谢谢大家
var xElement = (from elemet in xdoc.Elements("Projects").Elements("Project")
where elemet.Attribute("projectName").Value == foundProject
select elemet);
xElement.Remove();
Run Code Online (Sandbox Code Playgroud)
Remove是一个(void)方法调用,而不是一个可以返回值的函数.你可能想要这样的东西:
var elementsToRemove = from elemet in xdoc.Elements("Projects").Elements("Project")
where elemet.Attribute("projectName").Value == "project1"
select elemet;
foreach (var e in elementsToRemove)
e.Remove();
Run Code Online (Sandbox Code Playgroud)
LINQ是一种查询语言,它(主要)用于返回某些东西.对这些元素执行操作通常是一个单独的步骤.
你可以用
xdoc.Elements("Projects").Elements("Project").Where(
elemet => elemet.Attribute("projectName").Value == "project1")
.ToList().ForEach(i => i.Remove());
Run Code Online (Sandbox Code Playgroud)
要么
(from elemet in xdoc.Elements("Projects").Elements("Project")
where elemet.Attribute("projectName").Value == "project1"
select elemet).ToList().ForEach(i => i.Remove());
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码段:
xdoc.XPathSelectElement("Projects/Project[@projectName = 'project1']").Remove();
Run Code Online (Sandbox Code Playgroud)