xmlDocument提供dom模型的XML读写改及命名空间处理能力:支持Load/Save文件、XPath查询、节点增删改、命名空间管理,并需注意异常捕获与编码适配。

如果您需要在.net Core应用程序中处理XML数据,System.Xml.XmlDocument类提供了基于DOM模型的XML文档操作能力。以下是使用XmlDocument进行XML文件读写的具体方法:
一、使用XmlDocument读取XML文件
XmlDocument通过加载XML文件或字符串构建内存中的树状结构,允许随机访问任意节点。该方式适用于需要频繁查询、修改节点的场景。
1、创建XmlDocument实例并调用Load方法传入XML文件路径。
2、使用GetElementsByTagName方法按标签名获取XmlnodeList集合。
3、遍历XmlNodeList,通过FirstChild.InnerText或Attributes.GetNamedItem获取节点文本值或属性值。
4、对特定XmlNode调用SelectSingleNode配合XPath表达式精确定位子节点。
二、使用XmlDocument写入XML文件
XmlDocument支持动态创建元素、设置属性及追加子节点,最终通过Save方法将整个文档持久化到磁盘。该方式适用于生成结构明确的XML输出。
1、创建XmlDocument实例并调用CreateXmlDeclaration方法添加XML声明节点。
2、调用CreateElement创建根元素,并使用appendChild将其加入文档。
3、对每个子元素重复调用CreateElement和CreateAttribute,再通过SetAttributeNode或SetAttribute设置属性值。
4、使用AppendChild将子元素添加至父元素,最后调用Save方法传入文件路径保存文档。
三、使用XmlDocument修改现有XML内容
XmlDocument允许在已加载的文档中定位、更新、插入或删除节点。所有变更均在内存中完成,需显式调用Save才能写入磁盘。
1、使用Load加载目标XML文件。
2、通过GetElementById或SelectSingleNode定位待修改节点。
3、调用InnerText属性直接替换节点文本内容。
4、调用Attributes.SetNamedItem更新指定属性值,或使用RemoveAll清除全部属性后重新添加。
5、调用ReplaceChild替换整段子树结构。
四、处理命名空间的XML读写
当XML包含命名空间(xmlns)时,必须使用XmlNamespaceManager注册前缀与URI映射,否则XPath查询将无法匹配节点。
1、加载文档后创建XmlNamespaceManager实例,并调用AddNamespace传入前缀和URI。
2、在SelectSingleNode或SelectNodes中使用带前缀的XPath表达式,如“//ns:book/ns:title”。
3、创建新元素时调用CreateElement传入前缀、本地名和命名空间URI三个参数。
4、保存前确保XmlDocument.DocumentElement的xmlns属性已正确设置为对应URI。
五、异常处理与编码注意事项
XmlDocument在解析非法格式XML时会抛出XmlException,且默认使用UTF-8编码读写文件。若源文件含bom或特殊编码,需手动处理流以避免乱码。
1、使用Filestream配合StreamReader指定编码打开文件,再将StreamReader传递给Load方法。
2、在try-catch块中包裹Load和Save调用,捕获XmlException并检查InnerException获取详细错误位置。
3、调用Save时若目标目录不存在,需提前调用Directory.CreateDirectory确保路径有效。
4、对用户输入的XML内容执行Load前,应先验证其是否为良构XML,可借助XmlReader.Create配合XmlReaderSettings.DtdProcessing = DtdProcessing.Ignore提升安全性。