必须显式声明并使用XNamespace,元素名由命名空间与本地名共同构成;正确写法为XNamespace ns = “URI”; doc.Root.Elements(ns + “book”);避免忽略命名空间或字符串拼接命名空间前缀。
在C#中使用LINQ to XML查询带命名空间的XML,关键在于**必须显式声明并使用XNamespace**,否则查询会返回空结果——这是最常见的坑。
正确声明和使用XNamespace
XML命名空间不是“可选修饰”,而是节点全名的一部分。LINQ to XML中,元素名 = 命名空间 + 本地名,二者缺一不可。
- 用 XNamespace ns = “http://example.com/ns” 声明命名空间对象
- 构造带命名空间的元素名时,写成 ns + “ElementName”(如
ns + "book") - 不能用字符串拼接(如
"{http://example.com/ns}book")或忽略命名空间直接查"book"
完整查询示例(含默认命名空间)
假设XML如下(含默认命名空间):