XML を PowerShell の [xml] 並に動的簡単読み出しするための DynamicObject。 今のところ読み取り専用。
Inheritance: System.Dynamic.DynamicObject
Ejemplo n.º 1
0
        public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)
        {
            var name = binder.Name;

            // 属性値は _属性名 で取得。文字列として返す。
            if (name.StartsWith("_"))
            {
                var attName = name.Substring(1);

                result = element.Attribute(attName).Value;
                return(true);
            }

            var subElements = element.Elements(name).ToList();

            // 要素がないときは null 返す。
            if (subElements.Count == 0)
            {
                result = (string)null;
                return(true);
            }

            // 要素が1個だけの時は素直にその要素を返す。
            if (subElements.Count == 1)
            {
                var e = subElements[0];

                result = new DynamicXml(e);
                return(true);
            }

            // 要素が複数ある時はリストで要素一覧を返す。
            var es = subElements.Select(x => new DynamicXml(x));

            result = es.ToList();
            return(true);
        }
Ejemplo n.º 2
0
        public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)
        {
            var name = binder.Name;

            // 属性値は _属性名 で取得。文字列として返す。
            if (name.StartsWith("_"))
            {
                var attName = name.Substring(1);

                result = element.Attribute(attName).Value;
                return true;
            }

            var subElements = element.Elements(name).ToList();

            // 要素がないときは null 返す。
            if (subElements.Count == 0)
            {
                result = (string)null;
                return true;
            }

            // 要素が1個だけの時は素直にその要素を返す。
            if (subElements.Count == 1)
            {
                var e = subElements[0];

                result = new DynamicXml(e);
                return true;
            }

            // 要素が複数ある時はリストで要素一覧を返す。
            var es = subElements.Select(x => new DynamicXml(x));
            result = es.ToList();
            return true;
        }