2010-01-28 115 views
1
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Book List</title> 
</head> 
<body> 
<blist:books 
xmlns:blist="http://www.wrox.com/books/xml"> 
<blist:book> 
<blist:title>XSLT Programmers Reference</blist:title> 
<blist:author>Michael Kay</blist:author> 
</blist:book> 
</blist:books> 
</body> 
</html> 

從給定的Xml文檔中,我想遍歷所有<blist:books>元素。 (即) 如何處理名稱空間?Linq to XML - 命名空間

我試圖

XNamespace blist = XNamespace.Get("http://www.wrox.com/books/xml"); 
XElement element = XElement.Load("Books.xml"); 
IEnumerable<XElement> titleElement = 
      from el in element.Elements(blist + "books") select el; 

但枚舉(titleElement)不返回任何結果。

回答

0

這裏有兩個不同的問題。

  1. 你調用Elements方法,它返回調用它的元素的直接子元素。由於<html>元素沒有直接<blist:books>子元素,您沒有得到任何結果。
  2. XML區分大小寫。您需要編寫books,而不是Books

另外,寫作from el in whatever select el沒有意義。除非您添加邏輯(例如whereorderby子句或非重要的select),否則應該只寫whatever

因此,你需要用下面的更換你的LINQ查詢:

IEnumerable<XElement> titleElement = element.Descendants(blist + "books"); 
+0

是的,它解決DMY problem.Thank你。 – David 2010-01-28 15:26:19

+0

如果我想使用XmlTextReader(不是LINQ到XML),我怎麼能達到相同的結果? – David 2010-01-28 15:31:05

+0

這將需要更多的代碼。 LINQ to XML是在.NET中處理XML的最簡單方式。 – SLaks 2010-01-28 15:34:44