public static EmpDocument Create(MondaiDocument mondaiDocument)
        {
            var result = new FishDocument();
            var documentElement = new FishElement("document");
            documentElement.Items.Add(new FishElement("id", mondaiDocument.Id));
            documentElement.Items.Add(new FishElement("title", mondaiDocument.Name));
            result.Items.Add(documentElement);

            documentElement.Items.AddRange
            (
                mondaiDocument.Items.Select(daimon =>
                {
                    var daimonElement = new FishElement("daimon");
                    daimonElement.Items.Add(new FishElement("id", daimon.Id));
                    daimonElement.Items.Add(new FishElement("title", daimon.Name));
                    daimonElement.Items.AddRange
                    (
                        daimon.Items.Select(chumon =>
                        {
                            var chumonElement = new FishElement("chumon");
                            chumonElement.Items.Add(new FishElement("id", chumon.Id));
                            chumonElement.Items.Add(new FishElement("title", chumon.Name));
                            if (chumon.IsShuffled)
                            {
                                chumonElement.Items.Add(new FishElement("shuffle", "true"));
                            }
                            if (chumon.IsOptional)
                            {
                                chumonElement.Items.Add(new FishElement("optional", "true"));
                            }
                            chumonElement.Items.AddRange(chumon.HelpIds.Select(helpId => new FishElement("helpId", helpId)));
                            chumonElement.Items.AddRange
                            (
                                chumon.Items.Select(mondai =>
                                {
                                    var shomon = mondai as Shomon;
                                    if (null != shomon)
                                    {
                                        return Create(shomon);
                                    }
                                    var ankimon = mondai as Ankimon;
                                    if (null != ankimon)
                                    {
                                        return Create(ankimon);
                                    }
                                    throw new ApplicationException();
                                })
                            );
                            return chumonElement;
                        })
                    );
                    return daimonElement;
                })
            );

            var emp = new EmpDocument();
            emp._fishDocument = result;
            return emp;
        }
        public static FishElement Create(Shomon shomon)
        {
            if (null == shomon) throw new ArgumentNullException();
            var shomonElement = new FishElement("shomon");
            shomonElement.Items.Add(new FishElement("id", shomon.Id));
            shomonElement.Items.Add(new FishElement("mon", shomon.Mondaibun));

            var list = new List<MondaiWord>(shomon.MondaiWords);
            shomonElement.Items.AddRange(shomon.CorrectAnswers.Select(seikai =>
            {
                var mondaiWords = Shomon.正解探索(seikai, shomon.MondaiWords);
                foreach (var w in mondaiWords)
                {
                    var index = list.IndexOf(w);
                    if (-1 == index)
                    {
                        continue;
                    }
                    list.RemoveAt(index);
                }
                var result = MondaiWord.相互変換可能なテキスト形式を取得する(mondaiWords);
                return new FishElement("sei", result);
            }));
            shomonElement.Items.AddRange(list.Select(mondaiWord => new FishElement("word", mondaiWord.Text.Replace(" ", "+"))));
            return shomonElement;
        }
 public static FishElement Create(Ankimon ankimon)
 {
     var ankimonElement = new FishElement("ankimon");
     ankimonElement.Items.Add(new FishElement("id", ankimon.Id));
     ankimonElement.Items.AddRange(ankimon.AnkimonItems.Select(ankimonItem =>
     {
         var ankimonItemElement = new FishElement("item");
         ankimonItemElement.Items.Add(new FishElement("name", ankimonItem.Name));
         ankimonItemElement.Items.Add(new FishElement("split", MondaiWord.相互変換可能なテキスト形式を取得する(ankimonItem.MondaiWords)));
     //				ankimonItemElement.Items.AddRange(ankimonItem.MondaiWords.Select(mondaiWord => new FishElement("word", mondaiWord.Text)));
         return ankimonItemElement;
     }));
     return ankimonElement;
 }