|
namespace Boo1
import System
import System.Reflection
import Boo.Lang
import System.Xml
class XmlDocumentFu(IQuackFu):
_document as XmlDocument
def constructor(document as XmlDocument):
_document = document
def QuackInvoke(name as string, o as (object)) as object:
return null
def QuackGet(name as string, params as (object)) as object:
node as XmlNode
for child as XmlNode in _document.ChildNodes:
if child.Name == name:
node = child
break
if node is not null:
return XmlNodeFu(node)
ret as duck #this is type duck so you can call indexers optionally below
prop as PropertyInfo = _document.GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.Public)
if prop is not null:
ret = prop.GetValue(_document, null)
if params is not null:
for p in params:
ret = ret[p]
return ret
def QuackSet(name as string, o as (object), value as object) as object:
return null
class XmlNodeFu(IQuackFu):
_node as XmlNode
def constructor(node as XmlNode):
_node = node
def QuackInvoke(name as string, o as (object)) as object:
return null
def QuackGet(name as string, params as (object)) as object:
node as XmlNode
for child as XmlNode in _node.ChildNodes:
if child.Name == name:
node = child
break
if node is not null:
return XmlNodeFu(node)
attribute as XmlAttribute
for att as XmlAttribute in _node.Attributes:
if att.Name == name:
attribute = att
break
if attribute is not null:
return attribute
ret as duck
prop as PropertyInfo = _node.GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.Public)
if prop is not null:
ret = prop.GetValue(_node, null)
if params is not null:
for p in params:
ret = ret[p]
return null
def QuackSet(name as string, params as (object), value as object) as object:
return null
|