summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream/matcher/xpath.py
blob: 7f3d20be402f9d8b876be2404fd502fc5c3f4524 (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
27
28
29
30
31
32
33
34
"""
    SleekXMPP: The Sleek XMPP Library
    Copyright (C) 2010  Nathanael C. Fritz
    This file is part of SleekXMPP.

    See the file LICENSE for copying permission.
"""
from . import base
from xml.etree import cElementTree

ignore_ns = False

class MatchXPath(base.MatcherBase):

	def match(self, xml):
		if hasattr(xml, '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