| 352 | |
| 353 | |
| 354 | class Attr(Node): |
| 355 | __slots__=('_name', '_value', 'namespaceURI', |
| 356 | '_prefix', 'childNodes', '_localName', 'ownerDocument', 'ownerElement') |
| 357 | nodeType = Node.ATTRIBUTE_NODE |
| 358 | attributes = None |
| 359 | specified = False |
| 360 | _is_id = False |
| 361 | |
| 362 | _child_node_types = (Node.TEXT_NODE, Node.ENTITY_REFERENCE_NODE) |
| 363 | |
| 364 | def __init__(self, qName, namespaceURI=EMPTY_NAMESPACE, localName=None, |
| 365 | prefix=None): |
| 366 | self.ownerElement = None |
| 367 | self.ownerDocument = None |
| 368 | self._name = qName |
| 369 | self.namespaceURI = namespaceURI |
| 370 | self._prefix = prefix |
| 371 | if localName is not None: |
| 372 | self._localName = localName |
| 373 | self.childNodes = NodeList() |
| 374 | |
| 375 | # Add the single child node that represents the value of the attr |
| 376 | self.childNodes.append(Text()) |
| 377 | |
| 378 | # nodeValue and value are set elsewhere |
| 379 | |
| 380 | def _get_localName(self): |
| 381 | try: |
| 382 | return self._localName |
| 383 | except AttributeError: |
| 384 | return self.nodeName.split(":", 1)[-1] |
| 385 | |
| 386 | def _get_specified(self): |
| 387 | return self.specified |
| 388 | |
| 389 | def _get_name(self): |
| 390 | return self._name |
| 391 | |
| 392 | def _set_name(self, value): |
| 393 | self._name = value |
| 394 | if self.ownerElement is not None: |
| 395 | _clear_id_cache(self.ownerElement) |
| 396 | |
| 397 | nodeName = name = property(_get_name, _set_name) |
| 398 | |
| 399 | def _get_value(self): |
| 400 | return self._value |
| 401 | |
| 402 | def _set_value(self, value): |
| 403 | self._value = value |
| 404 | self.childNodes[0].data = value |
| 405 | if self.ownerElement is not None: |
| 406 | _clear_id_cache(self.ownerElement) |
| 407 | self.childNodes[0].data = value |
| 408 | |
| 409 | nodeValue = value = property(_get_value, _set_value) |
| 410 | |
| 411 | def _get_prefix(self): |
searching dependent graphs…