我负责从XML文档访问特定的节点。 我意识到,这是一个基本的命名空间。 这里是例子。
我有兴趣得到节点d的值:从所有的子节点(项)MediaUrl。 我还没有做到了这一点。
当调试变量迭代器“我”,我可以看到,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();
我会建议使用XNamespace
而非XName
(个人喜好,主要是-因为这是我怎么总处理命名空间在LINQ to XML)。 对我来说,建立事先的命名空间,然后用更省力Element(NS + "element name") than to use
XName.Get (though using
XName.Get`是完全正常的,如果这就是你想要做什么。
如果你想获得一个所有“MediaUrl”为每个条目的元素,那么我会做这样的事情:
XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
var query = (from i in doc.Descendants(d + "MediaUrl")
select new Image()
{
Url = i.Value
}).ToList();
如果你想获得只是其中之一,那么你需要做的东西有点不同,这取决于你想获得哪一个。
对于性能MediaUrl:
XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
var query = (from i in doc.Descendants(m + "properties")
select new Image()
{
Url = i.Element(d + "MediaUrl").Value
}).ToList();
对于缩略图MediaUrl:
XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
var query = (from i in doc.Descendants(d + "Thumbnail")
select new Image()
{
Url = i.Element(d + "MediaUrl").Value
}).ToList();
这里的关键是为了找回它与该元素的名称使用的名称空间结合。
var query = from i in doc.Descendants("{full namespace for prefix d}MediaUrl")
select new Image()
{
Url = i.Value
};