C# XElement 使用命名空间获取属性

C# XElement Get Attribute with a Namespace

我有许多 XElement,但它们的“href”属性有一个名称空间。当我尝试获取它时,它 returns 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() 中将名称空间添加到“href”,如“xlink:href”,但这会导致错误。有人知道如何施展这个魔法吗?

对于您的示例 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;

试试这个:

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;