【问题标题】:Find an delete specific XML node in C#在 C# 中查找删除特定 XML 节点
【发布时间】:2021-06-28 12:48:08
【问题描述】:

我需要找到以 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");

感谢您的宝贵时间!

【问题讨论】:

    标签: c# xml xml-parsing


    【解决方案1】:

    使用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");
    

    【讨论】:

    • 我已经设法在一个文件夹上批量完成
    • 你能解释一下这行吗? portalfiscal.inf.br/nfe"); >
    • 它将命名空间映射到搜索节点时要使用的前缀:docs.microsoft.com/en-us/dotnet/api/…
    • 再次感谢!帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多