def evalBackward(self, nodes):
"""Inverse evaluation of location path step."""
if self.__test == "*":
pass
elif '*' in self.__test:
nodes = set(i for i in nodes if fnmatchcase(i.getName(), self.__test))
else:
nodes = set(i for i in nodes if i.getName() == self.__test)
if self.__pred:
nodes = nodes & self.__pred.evalBackward()
if self.__axis == "child":
nodes = self.__evalAxisParent(nodes, True)
elif self.__axis == "descendant":
nodes = self.__evalAxisAncestor(nodes, True)
elif self.__axis == "descendant-or-self":
nodes = self.__evalAxisAncestor(nodes, True) | nodes
elif self.__axis == "direct-child":
nodes = self.__evalAxisParent(nodes, False)
elif self.__axis == "direct-descendant":
nodes = self.__evalAxisAncestor(nodes, False)
elif self.__axis == "direct-descendant-or-self":
nodes = self.__evalAxisAncestor(nodes, False) | nodes
elif self.__axis == "self":
pass
else:
assert False, "Invalid axis: " + self.__axis
return nodes
评论列表
文章目录