#xml #linq #linq-to-xml
#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();
Проблема, с которой я сталкиваюсь, заключается в том, что файл.Вызов Descendants («listing») не возвращает никаких результатов из XML-файла из-за информации о пространстве имен (я предполагаю, что проблема связана с этим сообщением: ASP.NET XPath 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:
Включить
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();