在 C# 中查找删除特定 XML 节点

Find an delete specific XML node in C#

我需要找到以 5902 为值的 /CFOP/ 标签的节点,因此它总是最终成为所有带有标签 /det nItem="x"/ 且 x 始终 > 1 的节点。那么我该怎么做才能让它发挥作用呢?

XML 文件:https://drive.google.com/file/d/1-ayEd1PSP9rECeyYesx3dTndInlqNouR/view?usp=sharing

我的代码正在打开文件并试图删除所有节点“det nItem > 2”,这是我从研究中所做的。但它只打开并保存文件,没有任何更改。

using System.Xml;

XmlDocument xml = new XmlDocument();
xml.Load(filename: "C:/Users/A376228/Desktop/xml/ped1.xml");
XmlNodeList nodeList = xml.SelectNodes(xpath: "/infNFe/det[@CFOP=" + 5902 + "]");

foreach (XmlNode node in nodeList)
{
    node.ParentNode.RemoveChild(node);
}
xml.Save(filename: "C:/Users/A376228/Desktop/xml/ped1-ready.xml");

感谢您的宝贵时间!

使用XmlNamespaceManager。此代码应删除 nItem > 2:

的单个节点
XmlDocument xml = new XmlDocument();
xml.Load(filename: "C:/Users/A376228/Desktop/xml/ped1.xml");
XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(xml.NameTable);
xmlNamespaceManager.AddNamespace("x", "http://www.portalfiscal.inf.br/nfe");
XmlNodeList nodeList = xml.DocumentElement.SelectNodes(xpath: "//x:infNFe/x:det[@nItem > 2]",
    xmlNamespaceManager);

foreach (XmlNode node in nodeList)
{
    node.ParentNode.RemoveChild(node);
}
xml.Save(filename: "C:/Users/A376228/Desktop/xml/ped1-ready.xml");