2010-03-26 21:32:16 +00:00
|
|
|
"""
|
|
|
|
SleekXMPP: The Sleek XMPP Library
|
|
|
|
Copyright (C) 2010 Nathanael C. Fritz
|
|
|
|
This file is part of SleekXMPP.
|
|
|
|
|
|
|
|
See the file license.txt for copying permission.
|
|
|
|
"""
|
2009-06-03 22:56:51 +00:00
|
|
|
from . import base
|
|
|
|
from xml.etree import cElementTree
|
|
|
|
|
2009-07-11 19:31:20 +00:00
|
|
|
ignore_ns = False
|
|
|
|
|
2009-06-03 22:56:51 +00:00
|
|
|
class MatchXPath(base.MatcherBase):
|
|
|
|
|
|
|
|
def match(self, xml):
|
2010-01-16 05:36:53 +00:00
|
|
|
if hasattr(xml, 'xml'):
|
|
|
|
xml = xml.xml
|
2009-06-03 22:56:51 +00:00
|
|
|
x = cElementTree.Element('x')
|
|
|
|
x.append(xml)
|
2009-07-11 19:31:20 +00:00
|
|
|
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]
|
2009-06-03 22:56:51 +00:00
|
|
|
return True
|