2012-06-14 3 views
0

У меня есть документ XML, который я пытаюсь выполнить. Основная структура выглядит следующим образом:Linq to XML-запрос не принимает значения

<?xml version="1.0"?> 
<!DOCTYPE ONIXMessage SYSTEM "http://www.editeur.org/onix/2.1/reference/onix-international.dtd"> 
<ONIXMessage xmlns="http://www.editeur.org/onix/2.1/reference" release="2.1"> 
    <Header> 
    <FromCompany>MyCo</FromCompany> 
    <FromPerson>Joe Bloggs</FromPerson> 
    <FromEmail>[email protected]</FromEmail> 
    <SentDate>20120522</SentDate> 
    </Header> 
    <Product> 
    <ProductForm>DG</ProductForm> 
    <Title> 
     <TitleType>01</TitleType> 
     <TitleText>Blogg</TitleText> 
    </Title> 
    <WorkIdentifier> 
     <WorkIDType>15</WorkIDType> 
     <IDValue>PI3564231</IDValue> 
    </WorkIdentifier> 
    <Language> 
     <LanguageRole>01</LanguageRole> 
     <LanguageCode>eng</LanguageCode> 
    </Language> 
    </Product> 
</ONIXMessage> 

Это, очевидно, укорачивается вниз для простоты, но внутри тега «продукта», есть гораздо больше информации. Файл также может содержать любое количество тегов «Продукт».

Я использую linq для xml для поиска этого документа и получения содержимого в моей базе данных, однако моя проблема заключается в том, что мой запрос не собирает теги «Продукт» в файле. Вот фрагмент кода, где продукт должен быть подобран:

XElement onix = XElement.Load(fs); 
    // Get all the product information. 
    // 
    var products = from prod in onix.Elements("Product") select prod; 

    foreach (var product in products) 
    { 
      //Process product 
    } 

После отлажена через код, я могу видеть, что переменная «оникс» заселяется. Я могу видеть все содержимое файла в этой переменной. Однако «продукты» не заселены.

Может ли кто-нибудь увидеть, есть ли что-то, что я делаю неправильно?

+1

Я думаю, вам нужно будет добавить пространство имен для запроса файла XML, как [имен + "Продукт"] – V4Vendetta

ответ

3

без имен:

var products = onix.Descendants() 
      .Where(m => m.Name.LocalName == "Product") 
      .ToList(); 
1

Вам нужно добавить Namespace

XElement onix = XElement.Load("test.xml"); 
XNamespace ns = "http://www.editeur.org/onix/2.1/reference"; 
var products = from prod in onix.Elements(ns+"Product") select prod; 
Смежные вопросы