[英]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.