2011-09-29 4 views
3

XML에서 선택할 때 Linq를 사용하려고합니다. 다음은 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이 어떤 결과를 반환 나던이다 네임 스페이스 정보 (이 게시물과 관련된 문제가 있다고 생각합니다 : ASP.NET 2.0 XmlDataSource's XPath doesn't support namespaces)로 인해 XML 파일에서. 그러나 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();