首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq to XML查询未选取任何值

Linq to XML查询未选取任何值
EN

Stack Overflow用户
提问于 2012-06-14 18:58:07
回答 2查看 191关注 0票数 0

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

代码语言:javascript
复制
<?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>
    <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>

为了简单起见,它显然被缩短了,但在“Product”标签中,有更多的信息。一个文件也可以有任意数量的“产品”标签。

我使用linq to xml来搜索这个文档并将内容放入我的数据库中,但是我的问题是我的查询没有在文件中提取任何'Product‘标签。下面是应该获取产品的代码片段:

代码语言:javascript
复制
    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”并没有被填充。

谁能看看我是不是做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-14 19:10:34

不使用命名空间:

代码语言:javascript
复制
var products = onix.Descendants()
             .Where(m => m.Name.LocalName == "Product")
             .ToList();
票数 3
EN

Stack Overflow用户

发布于 2012-06-14 19:08:42

您需要添加命名空间

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11031640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档