【发布时间】:2013-06-19 22:22:19
【问题描述】:
我正在处理从 XML 文档访问特定节点。我意识到这是一个基本命名空间。这是一个例子。
我有兴趣从所有后代节点(条目)获取节点 d:MediaUrl 的值。而我还没有做到这一点。
当我调试变量迭代器“i”时,我可以看到 XML 再次包含默认命名空间,类似于:
<entry xmlns="http://schemas.microsoft.com.ado/..."
而且我还必须包含另一个名为“d”的命名空间。
我可以做些什么来访问那些特定的节点?
这就是我所拥有的。
var doc = XDocument.Parse(result);
string BASE_NS = "http://www.w3.org/2005/Atom";
string d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
var query = from i in doc.Descendants(XName.Get("entry", BASE_NS))
select new Image()
{
Url = i.Element(XName.Get("MediaUrl", BASE_NS)).Value
};
var results = query.ToList();
【问题讨论】:
-
另外,您的选择不起作用,因为“MediaURL”不是“Entry”的子代,它是“Thumbnail”的子代 -
i.Element("content").Element("properties").Element("Thumbnail").Element("MediaUrl")(为简洁起见,省略了命名空间)。 -
谢谢蒂姆。
i.Element("content")不幸返回 null,我必须包含任何命名空间吗? -
您想要每个“条目”中的所有“MediaUrl”元素,还是只想要一个?每个条目中有两个 - 一个在属性下,一个在缩略图下。
-
要回答您之前的问题,对于那些没有命名空间前缀的元素(如“内容”),您需要使用默认命名空间(即“Feed”中的
xmlns="http://www.w3.org/2005/atom"你的例子的元素。要离开我下面的例子,它将是XNamespace a = "http://www.w3.org/2005/atom";,然后是Descendants(a + "content")。
标签: c# xml linq xml-parsing linq-to-xml