具有命名空间的C#XElement获取属性

问题描述

我有许多XElement,但是它们的“ href”属性具有名称空间。当我尝试获取它时,它返回null。

<link xlink:href="The/href" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="a/location">A value</link>

我尝试过:

XElement linkEl = doc.Root.Element("link");
string hrefValue = linkEl.Attribute("href").Value //null;

我还尝试将名称空间添加到Attribute()中的“ xlink:href”之类的“ href”中,但这会导致错误。有人知道如何表演这种魔法吗?

解决方法

尝试这个:

XDocument doc = XDocument.Parse(@"<link xlink:href=""The/href"" xmlns:xlink=""http://www.w3.org/1999/xlink"" xmlns=""a/location"">A value</link>");

XNamespace ab = "http://www.w3.org/1999/xlink";
string hrefValue = doc.Root.Attribute(ab + "href").Value;
,

对于示例XML,您无法使用其名称来查找元素,它必须是元素的LocalName。

要通过LocalName获取元素,请参见以下示例:

var linkElement = doc.Root.Elements().Where(e => e.Name.LocalName == "link").FirstOrDefault();
var linkAttribute = linkElement.Attributes().Where(a => a.Name.LocalName == "href").FirstOrDefault();
var hrefValue = linkAttribute.Value;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...