diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2007-07-24 22:16:45 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2007-07-24 22:16:45 +0000 |
| commit | 12ac0efc2b5d397bb968d38d050ad433ff538268 (patch) | |
| tree | 696c07db74478741b6ae1a1bbf99640d418fd305 /python/mllib | |
| parent | 9579f63d520b5b8ddfc718f81ed037968ab3838b (diff) | |
| download | qpid-python-12ac0efc2b5d397bb968d38d050ad433ff538268.tar.gz | |
Made attributes queryable.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@559241 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/mllib')
| -rw-r--r-- | python/mllib/dom.py | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/python/mllib/dom.py b/python/mllib/dom.py index 9b1740055b..80f1f2a409 100644 --- a/python/mllib/dom.py +++ b/python/mllib/dom.py @@ -145,14 +145,6 @@ class Tag(Node): if name == k: return v - def __getitem__(self, name): - if name and name[0] == "@": - return self.get_attr(name[1:]) - else: - for nd in self.query[name]: - return nd - return self.get_attr(name) - def dispatch(self, f): try: method = getattr(f, "do_" + self.name) @@ -203,6 +195,9 @@ class Filter(View): elif predicate[0] == "#": type = predicate[1:] self.predicate = lambda x: x.is_type(type) + elif predicate[0] == "@": + name = predicate[1:] + self.predicate = lambda x: x[0] == name else: self.predicate = lambda x: isinstance(x, Tag) and x.name == predicate @@ -231,6 +226,19 @@ class Children(View): for child in nd.children: yield child +class Attributes(View): + + def __iter__(self): + for nd in self.source: + for a in nd.attrs: + yield a + +class Values(View): + + def __iter__(self): + for name, value in self.source: + yield value + class Query(View): def __iter__(self): @@ -245,6 +253,9 @@ class Query(View): query = self.source for p in path: - query = Query(Filter(p, Flatten(Children(query)))) + if isinstance(p, basestring) and p[0] == "@": + query = Values(Filter(p, Attributes(query))) + else: + query = Query(Filter(p, Flatten(Children(query)))) return query |
