HiveNetCore.xml_hivenet module

简单xml文件处理模块

class HiveNetCore.xml_hivenet.EnumXmlObjType(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]

基类:Enum

xml对象类型

Bytes = 3
File = 0
FileHandle = 1
String = 2
class HiveNetCore.xml_hivenet.SimpleXml(xml_obj, obj_type=EnumXmlObjType.File, encoding=None, use_chardet=True, parser: str = 'xml', register_namespace=None, use_xpath2=False, **kwargs)[源代码]

基类:object

Xml配置文件的处理

示例

可以通过访问SimpleXml.root直接使用lxml.etree的原生方法

__init__(xml_obj, obj_type=EnumXmlObjType.File, encoding=None, use_chardet=True, parser: str = 'xml', register_namespace=None, use_xpath2=False, **kwargs)[源代码]

构造函数

参数
  • xml_obj (object) –

    要装载的报文载体(与obj_type结合来判断是什么对象), 例如(仅供参考):

    obj_type = EnumXmlObjType.File 时, obj为文件路径

    obj_type = EnumXmlObjType.FileHandle 时, obj为文件句柄

    obj_type = EnumXmlObjType.String 时, obj为报文文本

  • obj_type (EnumXmlObjType) – default=EnumXmlObjType.File, xml对象类型

  • encoding (string) – default=encoding, 装载字符编码, 如果传None代表自动判断

  • use_chardet (bool) – default=True, 当自动判断的时候, 是否使用chardet库

  • parser (str) –

    default=’xml’, 解析器类型, 默认为xml

    xml - 标准xml解析器

    html - html解析器, 兼容html一些不规范的地方

  • register_namespace (dict) –

    default=None, 注册命名空间别名, 格式为:

    {prefix: uri, prefix: uri, … } 其中prefix和uri都为字符串

    注册命名空间后, 后续的节点就可以通过tag=’{uri}tagname’的方式添加带命名空间的节点

  • use_xpath2 (bool) – default=False, 使用xpath2.0, 默认只支持xpath1.0

  • kwargs (**kwargs) –

    扩展的装载参数, 包括XMLParser的参数

    attribute_defaults - inject default attributes from DTD or XMLSchema

    dtd_validation - validate against a DTD referenced by the document

    load_dtd - use DTD for parsing

    no_network - prevent network access for related files (default: True)

    ns_clean - clean up redundant namespace declarations

    recover - try hard to parse through broken XML

    remove_blank_text - discard blank text nodes that appear ignorable

    装载时是否将空白文本去掉, 只有含这个参数, 打印时pretty_print才生效

    remove_comments - discard comments

    remove_pis - discard processing instructions

    strip_cdata - replace CDATA sections by normal text content (default: True)

    compact - save memory for short text content (default: True)

    collect_ids - use a hash table of XML IDs for fast access (default: True, always True with DTD validation)

    resolve_entities - replace entities by their text value (default: True)

    huge_tree - disable security restrictions and support very deep trees

    target - a parser target object that will receive the parse events

    schema - an XMLSchema to validate against

append_empty_node(xpath: str, tag: str, prefix: str = None, namespaces: dict = None)[源代码]

添加空节点到指定路径(匹配的第一个)

注意: 该方法不会判断节点标签是否已存在, 即使已存在也会添加新节点

参数
  • xpath (str) – 符合XPath语法的搜索路径

  • tag (str) – 要添加的空节点tag标签

  • prefix (str) – default=None, 命名空间指定前缀

  • namespaces (dict) – default=None, 命名空间

append_node(xpath, node: _Element, namespaces=None)[源代码]

添加节点到指定路径(匹配的第一个)

参数
  • xpath (string) – 符合XPath语法的搜索路径

  • namespaces (dict) – default=None, 命名空间

  • node (ET._Element) – 要添加的节点

append_path_node(path, namespaces=None, ignore_path_check: bool = False)[源代码]

按path生成对应路径的节点

参数
  • path (string) –

    要生成节点的搜索路径, 不支持非节点tag的属性及通配符的匹配

    标准格式如下: tag/tag/tag

  • namespaces (dict) –

    default=None, 命名空间

    可传入值的示例如下:

    ns = {

    ‘real_person’: ‘http://people.example.com’,

    ’role’: ‘http://characters.example.com

    }

  • ignore_path_check (bool) – default=False, 是否忽略路径检查(不检查直接操作)

引发

AttributeError – 当搜索路径不符合创建规范时, 抛出该异常

get_attr(xpath, attr_name, default='', namespaces=None)[源代码]

获取指定节点的属性值

参数
  • xpath (string) –

    符合XPath语法的搜索路径

    注: (1)如果指定了命名空间, 可以通过命名空间的key进行指定, 例如’real_person:actor’

    (2)xPath如果不是从’/’开始, 则默认从root节点开始搜索

  • attr_name (string) – 属性名

  • default (string) – default=’’, 如果找不到节点或具体属性时默认返回的值

  • namespaces (dict) –

    default=None, 命名空间

    可传入值的示例如下:

    ns = {

    ‘real_person’: ‘http://people.example.com’,

    ’role’: ‘http://characters.example.com

    }

static get_attr_on_node(node, xpath, attr_name, default='', namespaces=None)[源代码]

获取指定节点的属性值(从节点开始检索)

参数
  • node (ET._Element) – 开始检索的节点

  • xpath (string) –

    • 符合XPath语法的搜索路径

  • attr_name (string) – 属性名

  • default (string) – default=’’, 如果找不到节点或具体属性时默认返回的值

  • namespaces (dict) – default=None, 命名空间

static get_childnodes_on_node(node, xpath, namespaces=None)[源代码]

获取xpath指定的子节点(从节点开始检索)

参数
  • node (ET._Element) – 开始检索的节点

  • xpath (string) –

    • 符合XPath语法的搜索路径

  • namespaces (dict) – default=None, 命名空间

获取合法的标签名

参数

tag_name (str) – 要处理的标签名

get_nodes(xpath, namespaces=None)[源代码]

获取xpath指定的节点清单

参数
  • xpath (string) – 符合XPath语法的搜索路径

  • namespaces (dict) – default=None, 命名空间

get_value(xpath, default='', namespaces=None)[源代码]

获取指定节点的值

参数
  • xpath (string) –

    符合XPath语法的搜索路径

    注: (1)如果指定了命名空间, 可以通过命名空间的key进行指定, 例如’real_person:actor’

    (2)xPath如果不是从’/’开始, 则默认从root节点开始搜索

  • default (string) – default=’’, 如果找不到节点时默认返回的值

  • namespaces (dict) –

    default=None, 命名空间

    可传入值的示例如下:

    ns = {

    ‘real_person’: ‘http://people.example.com’,

    ’role’: ‘http://characters.example.com

    }

static get_value_on_node(node, xpath, default='', namespaces=None)[源代码]

获取指定节点的值(从节点开始检索)

参数
  • node (ET._Element) – 开始检索的节点

  • xpath (string) –

    • 符合XPath语法的搜索路径

  • default (string) – default=’’, 如果找不到节点时默认返回的值

  • namespaces (dict) – default=None, 命名空间

get_xpath(node: _Element)[源代码]

获取指定节点的xpath路径

参数

node (ET._Element) – 要获取搜索路径的节点

remove(xpath, namespaces=None, hold_tail=False)[源代码]

根据xpath删除节点

参数
  • xpath (string) – 符合XPath语法的搜索路径

  • namespaces (dict) – default=None, 命名空间

  • hold_tail (bool) – default=False, 是否保留上一节点的tail信息

remove_node(node: _Element, hold_tail=False)[源代码]

删除指定节点

参数
  • node (ET._Element) – 要删除的节点

  • hold_tail (bool) – default=False, 是否保留上一节点的tail信息

save(file=None, encoding=None, **kwargs)[源代码]

保存文件

参数
  • file (string|object) –

    default=None, 要保存的文件的完整路径, 如果不传代表修改原文件

    注: 也可以传入打开的文件句柄

  • encoding (string) – default=None, 文件编码, 如果为None代表使用创建时的编码

  • kwargs (**kwargs) –

    扩展的装载参数, 包括ElementTree.write的参数:

    method=”xml” - 方法, 可传入”xml”, “html” or “text”

    pretty_print=False - 是否针对打印格式美化

    xml_declaration=None - 控制是否在文件中添加xml的声明, True - 一直添加, False - 不添加

    如果传None, 代表只有encoding不是US-ASCII or UTF-8 or Unicode的时候才添加声明

    with_tail=True -

    standalone=None -

    doctype=None -

    compression=0 -

    exclusive=False -

    inclusive_ns_prefixes=None -

    with_comments=True -

    strip_text=False -

set_attr(xpath, attr_name, value, namespaces=None, auto_create=True, ignore_path_check=False)[源代码]

设置指定节点的值(只要节点存在强制新增属性)

参数
  • xpath (string) –

    符合XPath语法的搜索路径

    注: (1)如果指定了命名空间, 可以通过命名空间的key进行指定, 例如’real_person:actor’

    (2)xPath如果不是从’/’开始, 则默认从root节点开始搜索

  • attr_name (string) – 属性名

  • value (string) – 要设置的值

  • namespaces (dict) –

    default=None, 命名空间

    可传入值的示例如下:

    ns = {

    ‘real_person’: ‘http://people.example.com’,

    ’role’: ‘http://characters.example.com

    }

  • auto_create (bool) – default=True, 节点不存在的时候是否自动创建

  • ignore_path_check (bool) – default=False, 是否忽略路径检查(不检查直接操作)

引发

AttributeError – 当搜索路径不符合自动创建规范时, 抛出该异常

set_value(xpath, value, namespaces=None, auto_create=True, debug=False, ignore_path_check=False)[源代码]

设置指定节点的值

参数
  • xpath (string) –

    符合XPath语法的搜索路径

    注: (1)如果指定了命名空间, 可以通过命名空间的key进行指定, 例如’real_person:actor’

    (2)xPath如果不是从’/’开始, 则默认从root节点开始搜索

  • value (string) – 要设置的值

  • namespaces (dict) –

    default=None, 命名空间

    可传入值的示例如下:

    ns = {

    ‘real_person’: ‘http://people.example.com’,

    ’role’: ‘http://characters.example.com

    }

  • auto_create (bool) – default=True, 节点不存在的时候是否自动创建节点

  • debug (bool) – default=False, 如果出现不可预知的异常时, 打印入参

  • ignore_path_check (bool) – default=False, 是否忽略路径检查(不检查直接操作)

引发

AttributeError – 当搜索路径不符合自动创建规范时, 抛出该异常

set_value_by_dict(xpath: str, value_dict: dict, list_node_name: str = 'item', ignore_exception=False, debug=False, with_type: bool = False)[源代码]

将字典值写入xml对象中

参数
  • xpath (str) – 要写入的初始xpath

  • value_dict (dict) – 值字典, key写入tag名(将与参数的xpath组合), value为写入值

  • list_node_name (str) – default=’item’, 列表情况下子节点标签名

  • ignore_exception (bool) – default=False, 如果出现不可预知的异常, 忽略继续处理下一个

  • debug (bool) – default=False, 如果出现不可预知的异常时, 打印入参

  • with_type (bool) – default=False, 判断数据类型, 如果是特殊类型打上类型标签

to_dict(xpath=None, namespaces=None, **kwargs)[源代码]

输出xml节点为字典(dict)

注: 该函数不支持处理xml中的属性值

参数
  • xpath (string) – default=None, 符合XPath语法的搜索路径, 空代表根节点

  • namespaces (dict) – default=None, 命名空间

  • kwargs (**kwargs) –

    扩展的参数, 包括:

    item_dict_xpaths = None - {dict} - 指定list和tuple情况下, 使用字典作为列表项的节点xPath路径

    key - 节点对应的xPath, value - 搜索命名空间, 值为None或dict

    注: xPath为列表节点的路径(非列表项节点路径); xPath的路径从根节点开始查找

to_string(xpath=None, namespaces=None, **kwargs)[源代码]

输出xml节点为字符串

参数
  • xpath (string) – default=None, 符合XPath语法的搜索路径, 空代表根节点

  • namespaces (dict) – default=None, 命名空间

  • kwargs (**kwargs) –

    扩展的参数, 包括etree.tostring的参数:

    method=”xml”

    xml_declaration=None - 控制是否在文件中添加xml的声明, True - 一直添加, False - 不添加

    如果传None, 代表只有encoding不是US-ASCII or UTF-8 or Unicode的时候才添加声明

    pretty_print=True - 是否针对打印格式美化

    with_tail=True

    standalone=None

    doctype=None

    exclusive=False

    inclusive_ns_prefixes=None

    with_comments=True

    strip_text=False