在 C# 中用 Xmldocument 修改 xml

Modify xml with Xmldocument in C#

我正在尝试按照在此处 How to modify existing XML file with XmlDocument and XmlNode in C# 的另一个 post 上找到的说明编辑 xml 文档的值。

这是我的代码

XmlDocument xml = new XmlDocument();
        xml = xml.Load(@"https://www.aade.gr/sites/default/files/2020-09/SampleXML_1.1%20%20%28%CE%A4%CE%99%CE%9C-%CE%A0%CE%A9%CE%9B%CE%97%CE%A3%CE%97%CE%A3_%CE%91%CE%A5%CE%A4%CE%9F%CE%A4%CE%99%CE%9C%29%20.xml");

        XmlNodeList aNodes = xml.SelectNodes("/InvoicesDoc/invoice/issuer/vatNumber");


        foreach (XmlNode aNode in aNodes)
        {
            XmlAttribute vatAttribute = aNode.Attributes["vatNumber"];
            vatAttribute.Value = "123456789";
            
        }

        xml.Save(@"C:\Users\Kostas\Desktop\mydata\infinal.xml");

我的问题是 XmlNodeList aNodes 将 return 为空;我试图将 xml.SelectNodes("/InvoicesDoc/invoice/issuer/vatNumber") 更改为 xml.SelectNodes("/InvoicesDoc/invoice/issuer") 一直到单个 xml.SelectNodes("/InvoicesDoc") 但仍然 XmlNodeList aNodes 将 return 空。 第一次尝试我从文件加载 XML 文档并遇到问题。然后我想文件可能有问题所以直接从网站更改了文件的加载提供了我需要处理的这个 xml 模板。这两个选项都可以正常加载文件,正如我在保存时看到的那样,但我的更改不会完成,因为 aNodes 为空并且 foreach 循环将跳过马上。

我做错了什么?

提前感谢您的帮助。

ps 这是我需要编辑的 xml https://www.aade.gr/sites/default/files/2020-09/SampleXML_1.1%20%20%28%CE%A4%CE%99%CE%9C-%CE%A0%CE%A9%CE%9B%CE%97%CE%A3%CE%97%CE%A3_%CE%91%CE%A5%CE%A4%CE%9F%CE%A4%CE%99%CE%9C%29%20.xml

更新:我刚刚尝试使用在 https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms762271(v=vs.85) 上名为 books 的 Microsoft 示例中找到的另一个 xlm 当我寻找 /catalog/book 时,XmlNodelist 也会 return null/empty 。所以好的一面是我需要编辑的原始 xml 文件没有问题,坏的一面是我仍然无法弄清楚我做错了什么。

XmlNodeList aNodes returns null 因为 xml 包含这些命名空间声明:

<InvoicesDoc xmlns=\"http://www.aade.gr/myDATA/invoice/v1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" 
xsi:schemaLocation=\"http://www.aade.gr/myDATA/invoice/v1.0/InvoicesDoc-v0.6.xsd\" 
xmlns:icls=\"https://www.aade.gr/myDATA/incomeClassificaton/v1.0\" 
xmlns:ecls=\"https://www.aade.gr/myDATA/expensesClassificaton/v1.0\">

您需要通过以下方式管理您的 xml:

XmlDocument xml = new XmlDocument();
xml.Load(@"https://www.aade.gr/sites/default/files/2020-09/SampleXML_1.1%20%20%28%CE%A4%CE%99%CE%9C-%CE%A0%CE%A9%CE%9B%CE%97%CE%A3%CE%97%CE%A3_%CE%91%CE%A5%CE%A4%CE%9F%CE%A4%CE%99%CE%9C%29%20.xml");

XmlNamespaceManager manager = new XmlNamespaceManager(xml.NameTable);
            manager.AddNamespace("InvoicesDoc", "http://www.aade.gr/myDATA/invoice/v1.0");

//Example to get the root element
XmlNodeList root = xml.SelectNodes("/InvoicesDoc:InvoicesDoc", manager);

//Example to get the VatNumber tag
XmlNodeList aNodes =xml.SelectNodes("/InvoicesDoc:InvoicesDoc/InvoicesDoc:invoice/InvoicesDoc:issuer/InvoicesDoc:vatNumber", manager);