caselawclient.xml_helpers
1from typing import Dict, Optional 2 3from lxml import etree 4 5DEFAULT_NAMESPACES = { 6 "uk": "https://caselaw.nationalarchives.gov.uk/akn", 7 "akn": "http://docs.oasis-open.org/legaldocml/ns/akn/3.0", 8} 9 10# _Element is the only class lxml exposes, so need to use the private class for typing 11Element = etree._Element # noqa: SLF001 12 13 14def get_xpath_nodes( 15 node: Element, 16 path: str, 17 namespaces: Optional[Dict[str, str]] = None, 18) -> list[Element]: 19 result = node.xpath(path, namespaces=namespaces) 20 21 if not isinstance(result, list) or not all(isinstance(x, Element) for x in result): 22 raise TypeError(f"Expected to return list[Element], got {type(result).__name__}") 23 24 return result 25 26 27def get_xpath_match_string( 28 node: Element, 29 path: str, 30 namespaces: Optional[Dict[str, str]] = None, 31 fallback: str = "", 32) -> str: 33 return str((node.xpath(path, namespaces=namespaces) or [fallback])[0]) 34 35 36def get_xpath_match_strings( 37 node: Element, 38 path: str, 39 namespaces: Optional[Dict[str, str]] = None, 40) -> list[str]: 41 return [str(x) for x in node.xpath(path, namespaces=namespaces)]
DEFAULT_NAMESPACES =
{'uk': 'https://caselaw.nationalarchives.gov.uk/akn', 'akn': 'http://docs.oasis-open.org/legaldocml/ns/akn/3.0'}
Element =
<class 'lxml.etree._Element'>
def
get_xpath_nodes( node: lxml.etree._Element, path: str, namespaces: Optional[Dict[str, str]] = None) -> list[lxml.etree._Element]:
15def get_xpath_nodes( 16 node: Element, 17 path: str, 18 namespaces: Optional[Dict[str, str]] = None, 19) -> list[Element]: 20 result = node.xpath(path, namespaces=namespaces) 21 22 if not isinstance(result, list) or not all(isinstance(x, Element) for x in result): 23 raise TypeError(f"Expected to return list[Element], got {type(result).__name__}") 24 25 return result
def
get_xpath_match_string( node: lxml.etree._Element, path: str, namespaces: Optional[Dict[str, str]] = None, fallback: str = '') -> str:
def
get_xpath_match_strings( node: lxml.etree._Element, path: str, namespaces: Optional[Dict[str, str]] = None) -> list[str]: