我有一个要搜索的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>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‘标签。下面是应该获取产品的代码片段:
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”并没有被填充。
谁能看看我是不是做错了什么?
发布于 2012-06-14 19:10:34
不使用命名空间:
var products = onix.Descendants()
.Where(m => m.Name.LocalName == "Product")
.ToList();发布于 2012-06-14 19:08:42
您需要添加命名空间
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;https://stackoverflow.com/questions/11031640
复制相似问题