Author: rhs
Date: Tue Jul 24 15:16:45 2007
New Revision: 559241
URL: http://svn.apache.org/viewvc?view=rev&rev=559241
Log:
Made attributes queryable.
Modified:
incubator/qpid/trunk/qpid/python/mllib/dom.py
Modified: incubator/qpid/trunk/qpid/python/mllib/dom.py
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/python/mllib/dom.py?view=diff&rev=559241&r1=559240&r2=559241
==============================================================================
--- incubator/qpid/trunk/qpid/python/mllib/dom.py (original)
+++ incubator/qpid/trunk/qpid/python/mllib/dom.py Tue Jul 24 15:16:45 2007
@@ -145,14 +145,6 @@
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 @@
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 @@
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 @@
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