使用 Linq 删除 XML 中的子节点
Remove children nodes in XML using Linq
我有一个 XML 文件,其中包含父节点和嵌套在父节点中的子节点列表,我需要在满足特定条件时删除子节点。
例如:删除 id = 1 的所有联系节点。如何使用 linq 和 xml 实现此目的。这是我的 XML 结构
<Events>
<Event>
<id>1</id>
<title>AA</title>
<start>2019-12-01T14:13:58.863</start>
<end>2019-12-01T15:13:58.787</end>
<contacts>
<contact>
<id>1</id>
<name>ABC</name>
</contact>
<contact>
<id>2</id>
<name>ABCD</name>
</contact>
<contact>
<id>3</id>
<name>ABCDE</name>
</contact>
</contacts>
</Event>
<Event>
<id>2</id>
<title>BB</title>
<start>2019-12-01T14:13:58.863</start>
<end>2019-12-01T15:13:58.787</end>
<contacts>
<contact>
<id>1</id>
<name>ABC</name>
</contact>
<contact>
<id>2</id>
<name>ABCD</name>
</contact>
<contact>
<id>3</id>
<name>ABCDE</name>
</contact>
</contacts>
</Event>
</Events>
您可以使用此查询获取 XML 个节点
var query = xmlDoc.Descendants("contact").Where(e => e.Element("id").Value.Equals(id)).ToList();
然后运行
query.Remove()
删除返回的元素。
正如 Jon Skeet 指出的那样,没有必要做任何深奥的事情。这是一个完整的示例,说明如何操作。纯 LINQ 到 XML.
c#, LINQ to XML
void Main()
{
const string inputXML = @"e:\Temp\MikeOconner.xml";
const string outputXML = @"e:\Temp\MikeOconner_output.xml";
XDocument xml = XDocument.Load(inputXML);
xml.Root.DescendantsAndSelf("contact")
.Where(r => (string)r.Element("id").Value == "1")
.Remove();
xml.Save(outputXML);
}
我有一个 XML 文件,其中包含父节点和嵌套在父节点中的子节点列表,我需要在满足特定条件时删除子节点。 例如:删除 id = 1 的所有联系节点。如何使用 linq 和 xml 实现此目的。这是我的 XML 结构
<Events>
<Event>
<id>1</id>
<title>AA</title>
<start>2019-12-01T14:13:58.863</start>
<end>2019-12-01T15:13:58.787</end>
<contacts>
<contact>
<id>1</id>
<name>ABC</name>
</contact>
<contact>
<id>2</id>
<name>ABCD</name>
</contact>
<contact>
<id>3</id>
<name>ABCDE</name>
</contact>
</contacts>
</Event>
<Event>
<id>2</id>
<title>BB</title>
<start>2019-12-01T14:13:58.863</start>
<end>2019-12-01T15:13:58.787</end>
<contacts>
<contact>
<id>1</id>
<name>ABC</name>
</contact>
<contact>
<id>2</id>
<name>ABCD</name>
</contact>
<contact>
<id>3</id>
<name>ABCDE</name>
</contact>
</contacts>
</Event>
</Events>
您可以使用此查询获取 XML 个节点
var query = xmlDoc.Descendants("contact").Where(e => e.Element("id").Value.Equals(id)).ToList();
然后运行
query.Remove()
删除返回的元素。
正如 Jon Skeet 指出的那样,没有必要做任何深奥的事情。这是一个完整的示例,说明如何操作。纯 LINQ 到 XML.
c#, LINQ to XML
void Main()
{
const string inputXML = @"e:\Temp\MikeOconner.xml";
const string outputXML = @"e:\Temp\MikeOconner_output.xml";
XDocument xml = XDocument.Load(inputXML);
xml.Root.DescendantsAndSelf("contact")
.Where(r => (string)r.Element("id").Value == "1")
.Remove();
xml.Save(outputXML);
}