c# - 在 C# 中使用 Xmldocument 修改 xml
问题描述
我正在尝试按照此处如何在 C# 中使用 XmlDocument 和 XmlNode 修改现有 XML 文件的另一篇文章中的说明编辑 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将返回空;我试图将xml.SelectNodes("/InvoicesDoc/invoice/issuer/vatNumber")更改为xml.SelectNodes("/InvoicesDoc/invoice/issuer")并一直更改为单个xml.SelectNodes("/InvoicesDoc" )但XmlNodeList aNodes仍将返回空。第一次尝试我从文件中加载了 XML 文档并遇到了问题。然后我认为文件可能有问题所以直接从站点更改文件的负载提供了我需要处理的这个 xml 模板。这两个选项都会很好地加载文件,因为我可以在保存时看到它,但是我的更改不会完成,因为aNodes是空的并且是foreach循环将立即跳过。
我究竟做错了什么?
提前感谢您的帮助。
更新:我刚刚尝试在 microsoft 示例中找到另一个 xlm,称为https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms762271(v=vs.85) XmlNodelist 上的书籍也将返回 null /empty 当我查找 /catalog/book 时。所以好的一面是我需要编辑的原始 xml 文件没有问题,坏的一面是我仍然无法弄清楚我做错了什么。
解决方案
XmlNodeList aNodes返回 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);
推荐阅读
- ubuntu-18.04 - NFS 内核服务器活动但已退出状态
- java - 客户端可以负责按需创建由 HikariCP(或其他池解决方案)管理的 java.sql.Connnection 吗?
- java - 有没有办法在无限滚动网站上用硒捕获“div”元素?
- python - python:修改参数而不创建新对象
- html - 如何比较来自firebase的两个字符串的总和
- android - NativeScript HTTP 获取请求不起作用。安卓版本问题?
- javascript - 创建一个读取文本并使用它的 API
- c# - 我想创建 get 方法来从我的 mongo 服务器返回原始 bson 文档,而不将它们映射到具有特定字段的模型
- javascript - 设置状态后无法发送响应
- javascript - 如何添加前缀以响应本机文本输入?