slixmpp/sleekxmpp/xmlstream/matcher/xpath.py

35 lines
799 B
Python
Raw Normal View History

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 for copying permission.
2010-03-26 21:32:16 +00:00
"""
2009-06-03 22:56:51 +00:00
from . import base
from xml.etree import cElementTree
ignore_ns = False
2009-06-03 22:56:51 +00:00
class MatchXPath(base.MatcherBase):
def match(self, xml):
if hasattr(xml, 'xml'):
xml = xml.xml
2009-06-03 22:56:51 +00:00
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]
2009-06-03 22:56:51 +00:00
return True