Проблема LINQ to XML из-за пространства имен xml - PullRequest
3 голосов
/ 29 сентября 2011

Я пытаюсь использовать 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 из-за информации о пространстве имен (я предполагаю проблему, связанную с этим сообщением: XPath ASP.NET 2.0 XmlDataSource не поддерживает пространства имен ). Тем не менее, если я изменю XML-файл, чтобы не было информации о пространстве имен, как показано ниже:

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

это работает. К сожалению, у меня нет доступа для изменения файла XML, поэтому мне нужно решение, которое будет работать. Любая помощь приветствуется.

спасибо, Джо

1 Ответ

4 голосов
/ 29 сентября 2011

Включить

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...