如何获得与XML命名空间的特定节点?(How to get an specific node in

2019-11-02 05:53发布

我负责从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();

Answer 1:

我会建议使用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();

这里的关键是为了找回它与该元素的名称使用的名称空间结合。



Answer 2:

var query = from i in doc.Descendants("{full namespace for prefix d}MediaUrl")
                    select new Image()
        {
            Url = i.Value
        };


文章来源: How to get an specific node in xml with namespaces?