HiveNetCore.xml_hivenet module¶
简单xml文件处理模块
- class HiveNetCore.xml_hivenet.EnumXmlObjType(value)[源代码]¶
基类:
enum.Enumxml对象类型
- 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)[源代码]¶
基类:
objectXml配置文件的处理
示例
可以通过访问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: Optional[str] = None, namespaces: Optional[dict] = None)[源代码]¶
添加空节点到指定路径(匹配的第一个)
注意: 该方法不会判断节点标签是否已存在, 即使已存在也会添加新节点
- 参数
xpath (str) – 符合XPath语法的搜索路径
tag (str) – 要添加的空节点tag标签
prefix (str) – default=None, 命名空间指定前缀
namespaces (dict) – default=None, 命名空间
- append_node(xpath, node: lxml.etree._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, 命名空间
可传入值的示例如下:
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, 命名空间
可传入值的示例如下:
- 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, 命名空间
- 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, 命名空间
可传入值的示例如下:
- static get_value_on_node(node, xpath, default='', namespaces=None)[源代码]¶
获取指定节点的值(从节点开始检索)
- 参数
node (ET._Element) – 开始检索的节点
xpath (string) –
符合XPath语法的搜索路径
default (string) – default=’’, 如果找不到节点时默认返回的值
namespaces (dict) – default=None, 命名空间
- remove(xpath, namespaces=None, hold_tail=False)[源代码]¶
根据xpath删除节点
- 参数
xpath (string) – 符合XPath语法的搜索路径
namespaces (dict) – default=None, 命名空间
hold_tail (bool) – default=False, 是否保留上一节点的tail信息
- remove_node(node: lxml.etree._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, 命名空间
可传入值的示例如下:
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, 命名空间
可传入值的示例如下:
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