/// <summary> /// XmlContentsを読み込みます。 /// </summary> /// <param name="info"></param> /// <returns></returns> public override XmlContents LoadContents(XmlContentsReadInfo info) { XmlContents contents = info.Package.CreateXmlContents(""); XmlTextReader reader = info.Reader; while (reader.Read()) { if (reader.IsStartElement(contents.ContentsRootElement)) { string name = reader.GetAttribute(contents.ContentsRootNameAttribute); contents.Name = name; int count = int.Parse(reader.GetAttribute(contents.ContentsRootCountAttribute)); reader.Read(); for (int i = 0; i < count; i++) { XmlContentsItemReadInfo itemInfo = new XmlContentsItemReadInfo() { Reader = reader, ItemProvider = contents.ItemProvider, Contents = contents }; XmlContentsItem item = this.LoadContentsItem(itemInfo); contents.AddXmlContentsItem(name + '.' + item.Name, item); } break; } } return(contents); }
/// <summary> /// ContentsItemを読み込みます。 /// </summary> /// <param name="item"></param> /// <param name="info"></param> public override void LoadContentsItem(XmlContentsItem item, XmlContentsItemReadInfo info) { XmlTextReader reader = info.Reader; if (reader.HasValue) { item.Value = double.Parse(reader.ReadString()); } }
/// <summary> /// XmlContentsItemを読み込みます。 /// </summary> /// <param name="info"></param> /// <returns></returns> public override XmlContentsItem LoadContentsItem(XmlContentsItemReadInfo info) { XmlTextReader reader = info.Reader; XmlContentsItemProvider provider = info.ItemProvider; try { if (reader.IsStartElement(provider.ItemRootElement)) { string name = reader.GetAttribute(provider.ItemRootNameAttribute); string typeName = reader.GetAttribute(provider.ItemRootTypeAttribute); XmlContentsItemType type = (XmlContentsItemType)Enum.Parse(typeof(XmlContentsItemType), typeName); bool isEmpty = reader.IsEmptyElement; XmlContentsItem item = provider.GenerateItem(type, name); if (item != null) { XmlContentsItemReader itemReader = this.CreateItemReader(type); if (!itemReader.HaveAttribute) { //読み取るItemが属性を持っていない場合、Readerを読み進める。 //属性を持っている場合、itemReader.LoadContentsItemメソッド内で属性値を読み取った後にReaderを読み進める。 reader.Read(); } itemReader.LoadContentsItem(item, info); //item.Load(reader); } if (!isEmpty) { reader.Read(); } return(item); } return(null); } catch (XmlException) { throw; } catch (Exception) {// ex){ //AppMain.g_AppMain.DebugWrite(ex); throw; } }
/// <summary> /// ContentsItemを読み込みます。 /// </summary> /// <param name="item"></param> /// <param name="info"></param> public override void LoadContentsItem(XmlContentsItem item, XmlContentsItemReadInfo info) { XmlTextReader reader = info.Reader; ContainerXmlContentsItem container = (ContainerXmlContentsItem)item; try { reader.ReadStartElement(container.ItemCountElement); int count = int.Parse(reader.ReadString()); reader.Read(); for (int i = 0; i < count; i++) { //XmlContentsItem item1 = container.ItemProvider.Load(reader); XmlContentsItem item1 = this.ParentReader.LoadContentsItem(info); container.Items.Add(item1.Name, item1); } } catch (XmlException) { // ex){ //AppMain.g_AppMain.DebugWrite(ex); throw; } }
/// <summary> /// ContentsItemを読み込みます。 /// </summary> /// <param name="item"></param> /// <param name="info"></param> public override void LoadContentsItem(XmlContentsItem item, XmlContentsItemReadInfo info) { XmlTextReader reader = info.Reader; ContainerXmlContentsItem container = (ContainerXmlContentsItem)item; try { //reader.ReadStartElement(container.ItemCountElement); //int count = int.Parse(reader.ReadString()); //reader.Read(); //NOTE:HaveAttribute=Trueによりreader.Readが必要になったが、Count要素が無くなったため、reader.Readが不要となり、相殺された。 int count = int.Parse(reader.GetAttribute(container.ItemCountElement)); reader.Read(); for (int i = 0; i < count; i++) { //XmlContentsItem item1 = container.ItemProvider.Load(reader); XmlContentsItem item1 = this.ParentReader.LoadContentsItem(info); container.Items.Add(item1.Name, item1); } } catch (XmlException) { // ex){ //AppMain.g_AppMain.DebugWrite(ex); throw; } }
/// <summary> /// 指定したXmlContentsItemの読み込みを行います。 /// </summary> /// <param name="item"></param> /// <param name="info"></param> public abstract void LoadContentsItem(XmlContentsItem item, XmlContentsItemReadInfo info);
/// <summary> /// 派生クラスでオーバーライドされると、XmlContentsItemの読み込みを行うメソッドを定義します。 /// </summary> /// <param name="info"></param> /// <returns></returns> public abstract XmlContentsItem LoadContentsItem(XmlContentsItemReadInfo info);