📄 collectionparser.cs
字号:
using System;
using System.Xml;
using System.Reflection;
using System.Diagnostics;
using System.ComponentModel;
using System.Collections;
namespace gowk.GXF
{
/// <summary>
/// XmlElementParser 的摘要说明。
/// </summary>
internal class CollectionParser:XmlElementParserBase
{
public CollectionParser():base()
{
}
public override bool CanParse(XmlNode context, ParserState state)
{
if((context.NodeType==XmlNodeType.Element) && (state.Parent!=null))
{
string name=context.Name;
ObjectCreator co=ObjectCreator.Instance;
object lst=co.MemberInvokers.GetValue(state.Parent,name,state);
if(lst is IList)
{
state.Tag=lst;
return true;
}
}
return false;
}
public override object Parse(XmlNode context, ParserState state)
{
IList lst=(IList)state.Tag;
ObjectCreator co=ObjectCreator.Instance;
foreach(XmlAttribute nod in context.Attributes)
{
ParserState ps=new ParserState();
ps.Parent=lst;
ps.Instance=state.Instance;
ps.MemberInitializer=state.MemberInitializer;
object o=co.XmlElementParsers.Parse(nod,ps);
}
foreach(XmlNode nod in context.ChildNodes)
{
if(nod.NodeType!=XmlNodeType.Element)continue;;
ParserState ps=new ParserState();
ps.Parent=lst;
ps.Instance=state.Instance;
ps.MemberInitializer=state.MemberInitializer;
object o=co.XmlElementParsers.Parse(nod,ps);
if(o!=null)
{
lst.Add(o);
System.Diagnostics.Trace.WriteLine("add to collection:"+lst.ToString()+" "+o.ToString());
}
}
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -