问题描述
我有许多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;