簡體   English   中英

如何在帶有名稱空間的xml中獲取特定節點?

[英]How to get an specific node in xml with namespaces?

我正在處理從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();

我建議使用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
        };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM