关于C#:Linq to XML查询未获取任何值

Linq to XML query not picking up any values

我有一个要搜索的XML文档。主要结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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>joe@bloggs.com</FromEmail>
    <SentDate>20120522</SentDate>
  </Header>
  <Product>
    <ProductForm>DG</ProductForm>
   
      <TitleType>01</TitleType>
      <TitleText>Blogg</TitleText>
   
    <WorkIdentifier>
      <WorkIDType>15</WorkIDType>
      <IDValue>PI3564231</IDValue>
    </WorkIdentifier>
    <Language>
      <LanguageRole>01</LanguageRole>
      <LanguageCode>eng</LanguageCode>
    </Language>
  </Product>
</ONIXMessage>

为简单起见,它显然已缩短,但是在\\'Product \\'标签中,有很多信息。文件也可以具有任意数量的\\'Product \\'标签。

我正在使用linq到xml来搜索此文档并将内容带入我的数据库,但是我的问题是我的查询没有在文件中拾取任何\\'Product \\'标记。以下是应提取产品的代码段:

1
2
3
4
5
6
7
8
9
    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
    }

通过代码调试之后,我可以看到变量\\'onix \\'正在被填充。我可以在该变量中看到文件的全部内容。 \\'products \\'却未被填充。

谁能看到我做错了什么吗?


没有命名空间:

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

您需要添加名称空间

1
2
3
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;