将XDocument中的xelement与名称列表进行匹配
本文关键字:列表 XDocument 中的 xelement | 更新日期: 2023-09-27 18:18:02
我已经将类似于下面的Xml加载到一个XDocument
<requestlist>
<request name="Apple" jobtype="radio">
<schedule intervalminutes="1440" daily="true" updateDateTime="2014-08-07T15:43:00Z">
<channel>someData/channel>
<signal>someData</readysignal>
<frequency>someData</frequency>
</schedule>
<file>someData</file>
<file>someData</file>
</request>
</requestlist>
我现在想添加第二个请求,从第一个请求中获取一些信息,并删除一些不需要的元素,例如
<request name="newBanana">
<schedule intervalminutes="1440" daily="true" updateDateTime="2014-08-07T15:43:00Z">
</schedule>
<file>someData</file>
</request>
是否有一种简单的方法,我可以通过匹配一个列表来删除使用Linq的元素例如
using System.Xml.XPath;
XDocument configXml = XDocument.Parse(theXml)
var oldRequest = configXml.XPathSelectElement(@"/requestlist/request[@name=""Apple""]");
var nodesToRemove = new List<XName>() {"channel", "signal", "radio"};
var newRequest = oldRequest.Elements().Select(e => e.Name).Intersect(nodesToRemove); //OR something
首先让您的XPath停止在<schedule>
元素而不是<request>
,因为您将在这里删除<schedule>
的子元素:
var oldRequest = doc.XPathSelectElement(@"/requestlist/request[@name='Apple']/schedule");
那么是的,你可以使用简单的LINQ来删除列表中与名字匹配的元素:
var nodesToRemove = new List<XName>() { "channel", "signal", "radio" };
oldRequest.Elements()
.Where(o => nodesToRemove.Contains(o.Name))
.Remove();