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; |