// (0.6.0) #region *[static]XML要素からオブジェクトを生成(Generate) public static SeekPosition Generate(XElement seekElement) { var seek_pos = new SeekPosition(); var position = (TimeSpan?)seekElement.Attribute(POSITION_ATTRIBUTE); if (position.HasValue) { seek_pos.Position = position.Value; } var comment = (string)seekElement.Attribute(COMMENT_ATTRIBUTE); if (!string.IsNullOrEmpty(comment)) { seek_pos.Comment = comment; } return(seek_pos); }
// (0.6.0)SeekPositionに対応、 // (0.4.3)memo要素に対応。 // (0.3.3) #region *[static]XML要素からオブジェクトを生成(Generate) public static SweetQuestion Generate(XElement questionElement, string songsRoot = null) { var question = new SweetQuestion(); // XMLからインスタンスを生成するならばIDは常にあるのでは? // →songをインポートする時とかはそうではないかもしれない?ので一応有無をチェックする. // →でも,インポートする時はXML経由ではなくオブジェクト経由で行った方がいいのでは?(ファイル名のパスの扱いとか...) var id_attribute = questionElement.Attribute(ID_ATTRIBUTE); if (id_attribute != null) { question.ID = (int)id_attribute; } question.Category = (string)questionElement.Attribute(CATEGORY_ATTRIBUTE); question.No = (int?)questionElement.Attribute(NO_ATTRIBUTE); question.Title = (string)questionElement.Element(TITLE_ELEMENT); question.Artist = (string)questionElement.Element(ARTIST_ELEMENT); var file_name = (string)questionElement.Element(FILE_NAME_ELEMENT); // 相対パスをフルパスに直す作業が必要! if (!Path.IsPathRooted(file_name)) { file_name = Path.Combine(songsRoot, file_name); if (!Path.IsPathRooted(file_name)) { throw new ArgumentException("ファイル名が相対パスで記録されています.songsRootには,絶対パスを指定して下さい.", "songsRoot"); } } question.FileName = file_name; var sabi_pos = (double?)questionElement.Attribute(SABI_POS_ATTRIBUTE); if (sabi_pos.HasValue) { question.SabiPos = TimeSpan.FromSeconds(sabi_pos.Value); } var play_pos = (double?)questionElement.Attribute(PLAY_POS_ATTRIBUTE); if (play_pos.HasValue) { question.PlayPos = TimeSpan.FromSeconds(play_pos.Value); } var stop_pos = (double?)questionElement.Attribute(STOP_POS_ATTRIBUTE); if (stop_pos.HasValue) { question.StopPos = TimeSpan.FromSeconds(stop_pos.Value); } var memo = (string)questionElement.Element(MEMO_ELEMENT); if (!string.IsNullOrEmpty(memo)) { question.Memo = memo; } foreach (var seek_element in questionElement.Elements(SeekPosition.ELEMENT_NAME)) { question.SeekPositionList.Add(SeekPosition.Generate(seek_element)); ; } return(question); }