private void SetValue(MemberName name, object value)
        {
            if (_name.IsAttribute)
            {
                throw new ArgumentException("這個節點只允許文字資料。");
            }

            if (value == null)
            {
                if (XmlRecordDictionary.ContainsKey(name))
                {
                    XmlRecordDictionary.Remove(name);
                }

                if (ChildrenDictionary.ContainsKey(name))
                {
                    ChildrenDictionary.Remove(name);
                }

                return;
            }

            if (value is XmlObject)
            {
                XmlObject dl = value as XmlObject;
                dl.SetName(name.FullName);
                XmlRecordDictionary[name] = dl;
            }
            else
            {
                XmlObject newValue = null;

                if (value is XmlObject)
                {
                    newValue = value as XmlObject;

                    if (name.IsAttribute && !newValue._name.IsAttribute)
                    {
                        throw new ArgumentException("這個節點只允許文字資料。");
                    }

                    //防止自行建立的 XData.Name 與 MemberName 不相同。
                    //因為是否為 Xml 屬性的資訊在 Name 之中。
                    newValue._name = name;
                }
                else
                {
                    newValue = new XmlObject(name.FullName)
                    {
                        _string_value = value + ""
                    }
                };

                ChildrenDictionary[name] = newValue;
            }
        }
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            MemberName mn = new MemberName(binder.Name);

            if (UniqueMode)
            {
                if (XmlRecordDictionary.ContainsKey(mn))
                {
                    result = GetValues(mn);
                }
                else
                {
                    result = GetValue(mn);
                }
            }
            else
            {
                result = (EnsureOneAndReturnLast() as dynamic)[mn.FullName];
            }

            return(true);
        }