2011-09-29 66 views
3

我正在嘗試使用Linq從XML中進行選擇。下面是XML的例子:由於xml命名空間導致的LINQ to XML問題

<?xml version="1.0" encoding="UTF-8"?> 
<listingexport xmlns="http://websitexmlfeed.com/webservice/2/listings" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://websitexmlfeed.com/webservice/2/listings ../listings.xsd"> 
<listing> 
    <id>00001</id> 
    <name>Modelname</name> 
    <type>Typename</type> 
</listing> 
</listingexport> 

我使用的代碼如下:

XDocument le = XDocument.Load(@uri); 
var listings = (from listing in le.Descendants("listing") 
         select new listingType 
         { 
          Id = listing.Element("id").Value, 
          Name= listing.Element("name").Value, 
          Type= listing.Element("type").Value 
         }).ToList(); 

問題我已經是(「目錄」)調用的le.Descendants犯規返回任何結果從XML文件中得到名稱空間信息(我猜這個帖子有關的問題:ASP.NET 2.0 XmlDataSource's XPath doesn't support namespaces)。但是,如果我修改XML文件,所以沒有命名空間信息如此:

<?xml version="1.0" encoding="UTF-8"?> 
    <listingexport> 
    <listing> 
    <id>00001</id> 
    <name>Modelname</name> 
    <type>Typename</type> 
    </listing> 
    </listingexport> 

它的工作原理。不幸的是我沒有修改xml文件的權限,所以需要一個可行的解決方案。任何幫助讚賞。

謝謝你, 喬

回答

4

包括

XNamespace ns = "http://websitexmlfeed.com/webservice/2/listings"; 

,並嘗試

var listings = (from listing in le.Descendants(ns + "listing") 
         select new 
         { 
          Id = listing.Element(ns + "id").Value, 
          Name= listing.Element(ns + "name").Value, 
          Type= listing.Element(ns + "type").Value 
         }).ToList();