Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _parse(self):
super(XsdSelector, self)._parse()
try:
self.path = self.elem.attrib['xpath']
except KeyError:
self.parse_error("'xpath' attribute required:", self.elem)
self.path = "*"
else:
if not self.pattern.match(self.path.replace(' ', '')):
self.parse_error("Wrong XPath expression for an xs:selector")
try:
self.xpath_selector = Selector(self.path, self.namespaces, parser=XsdIdentityXPathParser)
except ElementPathError as err:
self.parse_error(err)
self.xpath_selector = Selector('*', self.namespaces, parser=XsdIdentityXPathParser)
# XSD 1.1 xpathDefaultNamespace attribute
if self.schema.XSD_VERSION > '1.0':
if 'xpathDefaultNamespace' in self.elem.attrib:
self.xpath_default_namespace = self._parse_xpath_default_namespace(self.elem)
else:
self.xpath_default_namespace = self.schema.xpath_default_namespace
level -= 1
if level == 0:
yield node
node.clear()
elif event == 'start-ns':
nsmap.append(node)
namespaces[node[0]] = node[1]
else:
try:
del namespaces[nsmap.pop()[0]]
except KeyError:
pass
namespaces.update(nsmap)
else:
selector = Selector(path, namespaces, strict=False, parser=XmlResourceXPathParser)
path = path.replace(' ', '').replace('./', '')
path_level = path.count('/') + 1 if path != '.' else 0
select_all = '*' in path and set(path).issubset({'*', '/'})
level = 0
for event, node in self.iterparse(resource, events):
if event == "start":
if level == 0:
self._root.clear()
self._root = node
level += 1
elif event == 'end':
level -= 1
if level == path_level and \
(select_all or node in selector.select(self._root)):
yield node
def _parse(self):
super(XsdSelector, self)._parse()
try:
self.path = self.elem.attrib['xpath']
except KeyError:
self.parse_error("'xpath' attribute required:", self.elem)
self.path = "*"
else:
if not self.pattern.match(self.path.replace(' ', '')):
self.parse_error("Wrong XPath expression for an xs:selector")
try:
self.xpath_selector = Selector(self.path, self.namespaces, parser=XsdIdentityXPathParser)
except ElementPathError as err:
self.parse_error(err)
self.xpath_selector = Selector('*', self.namespaces, parser=XsdIdentityXPathParser)
# XSD 1.1 xpathDefaultNamespace attribute
if self.schema.XSD_VERSION > '1.0':
if 'xpathDefaultNamespace' in self.elem.attrib:
self.xpath_default_namespace = self._parse_xpath_default_namespace(self.elem)
else:
self.xpath_default_namespace = self.schema.xpath_default_namespace