在C#中解析带有命名空间的XML时,必须正确处理命名空间,否则可能无法获取预期的节点或属性。.NET中的
System.Xml和
System.Xml.Linq都提供了对命名空间的良好支持。
使用XDocument(LINQ to XML)解析带命名空间的XML
这是现代C#推荐的方式,代码简洁且易读。
示例XML:
<?xml version="1.0" encoding="utf-8"?>解析代码:
using System; using System.Xml.Linq; var xml = @"<?xml version='1.0' encoding='utf-8'?>输出:
ID: 1, Value: Value1 ID: 2, Value: Value2使用XmlDocument解析带命名空间的XML
适用于较老的项目或需要DOM操作的场景。
using System; using System.Xml; string xml = @"<?xml version='1.0' encoding='utf-8'?>处理默认命名空间的情况
如果XML使用的是默认命名空间(没有前缀),也要特别注意:
<?xml version="1.0" encoding="utf-8"?>此时仍需用命名空间访问元素:
XDocument doc = XDocument.Parse(xml); XNamespace ns = "http://example.com/default"; var item = doc.Descendants(ns + "item").FirstOrDefault(); Console.WriteLine(item?.Value); // 输出: Default NS Item若忽略命名空间直接查
"item",结果为空。
小贴士
始终确认XML中的命名空间URI是否与代码中一致(区分大小写) 使用XNamespace + "ElementName"组合来构建带命名空间的元素名 在XPath中必须注册命名空间前缀 可以用
GetNamespaceOfPrefix和
GetPrefixOfNamespace反向查找 基本上就这些。只要记住:有命名空间就得显式声明,不能直接按无命名空间的方式查询。
