6

XMLから「Document」値をグループ化する必要があります。問題は、キー値(productType)が複数になる可能性があるためです。

これはXMLです:

<Documents>
<Document>
    <id>1</id>
    <title>title1</title>
    <productTypes>
        <productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
  <productType id="x3">Environmental, Health and Safety &amp; Sustainability</productType>
    </productTypes>
</Document>
<Document>
    <id>2</id>
    <title>title2</title>
    <productTypes>
  <productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
    </productTypes>
</Document>
<Document>
    <id>3</id>
    <title>title3</title>
    <productTypes>
  <productType id="x3">Environmental, Health and Safety &amp; Sustainability</productType>
    </productTypes>
</Document>
<Document>
    <id>4</id>
    <title>title4</title>
    <productTypes>
        <productType id="x2">Defense, Risk &amp; Security</productType>
    </productTypes>
</Document>

そして、これは私が試していることです:

var documents = from document in some.Descendants("Document")
                group document by (string)document
                    .Element("productTypes")
                    .Elements("productType")
                    .First() into docGroup
select docGroup;

私のコードは、productType要素が1つある場合にのみ機能します。productTypeの値が複数ある場合に機能するようにコードを変更するにはどうすればよいですか?

4

1 に答える 1

2

あなたはあなたが望む結果を説明しませんでしたが、私はあなたが次のグループ化を望んでいると思います:

        var documentGroups = 
            from document in XDocument.Load("input.xml").Descendants("Document")
            from productType in document.Element("productTypes").Elements("productType")
            group document by (string)productType.Attribute("id");

        foreach (var documentGroup in documentGroups)
        {
            Console.WriteLine("Group {0} has the following members:", documentGroup.Key);
            foreach (XElement document in documentGroup)
            {
                Console.WriteLine("\t{0}", (string)document.Element("title"));
            }
            Console.WriteLine();
        }

入力が

<Documents>
  <Document>
    <id>1</id>
    <title>title1</title>
    <productTypes>
      <productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
      <productType id="x3">Environmental, Health and Safety &amp; Sustainability</productType>
    </productTypes>
  </Document>
  <Document>
    <id>2</id>
    <title>title2</title>
    <productTypes>
      <productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
    </productTypes>
  </Document>
  <Document>
    <id>3</id>
    <title>title3</title>
    <productTypes>
      <productType id="x3">Environmental, Health and Safety &amp; Sustainability</productType>
    </productTypes>
  </Document>
  <Document>
    <id>4</id>
    <title>title4</title>
    <productTypes>
      <productType id="x2">Defense, Risk &amp; Security</productType>
    </productTypes>
  </Document>
</Documents>

その出力

Group x1 has the following members:
        title1
        title2

Group x3 has the following members:
        title1
        title3

Group x2 has the following members:
        title4
于 2012-05-26T12:47:59.320 に答える