由于xml命名空间而导致LINQ to XML问题

时间:2011-09-29 00:44:53

标签: xml linq linq-to-xml

我正在尝试使用Linq从XML中进行选择。以下是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(“listing”)调用不会返回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文件,因此需要一个可行的解决方案。任何帮助表示赞赏。

谢谢你, 乔

1 个答案:

答案 0 :(得分: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();