0

検索しようとしている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」タグ内にはさらに多くの情報があります。ファイルには、任意の数の「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'が設定されていることがわかります。その変数でファイルの内容全体を見ることができます。ただし、「製品」は入力されていません。

私が間違っていることがあるかどうか誰かが見ることができますか?

4

2 に答える 2

3

名前空間なし:

var products = onix.Descendants()
             .Where(m => m.Name.LocalName == "Product")
             .ToList();
于 2012-06-14T11:10:33.610 に答える
1

名前空間を追加する必要があります

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;
于 2012-06-14T11:08:41.660 に答える