summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream/matcher/xpath.py
blob: 060d5df3cf7d3f93c1cf62cdd18018156ea9dfc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from . import base
from xml.etree import cElementTree

ignore_ns = False

class MatchXPath(base.MatcherBase):

	def match(self, xml):
		x = cElementTree.Element('x')
		x.append(xml)
		if not ignore_ns:
			if x.find(self._criteria) is not None:
				return True
			return False
		else:
			criteria = [c.split('}')[-1] for c in self._criteria.split('/')]
			xml = x
			for tag in criteria:
				children = [c.tag.split('}')[-1] for c in xml.getchildren()]
				try:
					idx = children.index(tag)
				except ValueError:
					return False
				xml = xml.getchildren()[idx]
			return True