summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream/matcher/xpath.py
blob: 5e0411ef2feb29de6b1ce613d30cb00a11a9999d (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
26
from . import base
from xml.etree import cElementTree

ignore_ns = False

class MatchXPath(base.MatcherBase):

	def match(self, xml):
		xml = xml.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