Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

为 Junos PyEZ 会话指定 XML 解析器

总结 了解 Junos PyEZ 如何针对某些操作使用不同的 XML 解析器来优化内存使用和处理速度。

可扩展标记语言 (XML) 是表示和传达信息的标准。它是一种元语言,用于定义应用于数据集或文档的自定义标签,以描述各个元素的功能并编纂它们之间的层次结构关系。Junos OS 本身支持 XML 进行 Junos 设备的操作和配置。

客户端应用程序使用 XML 解析器来读取和处理 XML 文档,例如,在 Junos 设备的 RPC 回复中以 XML 形式返回的命令输出或配置数据。XML 分析器可以使用不同的方法来分析 XML 文档。文档对象模型 (DOM) 分析器创建整个 XML 文档的树表示形式,该文档将整体加载到内存中。相比之下,XML 简单 API (SAX) 分析器执行基于事件的分析,并按顺序分析 XML 文档的每个部分。因此,SAX 分析程序在任何时候都只加载内存中的一小部分 XML 数据。

SAX 解析器不需要大量内存来执行操作,但 DOM 解析器内存要求随着文档大小的增加而增加。通常,DOM 解析比 SAX 解析快,因为应用程序可以访问内存中的整个 XML 文档。但是,随着 XML 文档大小的增加,DOM 解析器需要更多的内存,并且 SAX 解析变得更加高效。

Junos PyEZ 使用 ncclient Python 库,该库默认使用 DOM 解析进行 XML 处理。在这种情况下,分析器将整个 XML 文档转换为对象 lxml 并将其加载到内存中。Junos 设备可以返回大型 XML 文档,以显示命令输出和配置数据。如果在这些情况下只需要从 XML 中检索一小部分值,则 DOM 解析可能效率低下。

从 Junos PyEZ 2.3.0 版开始,Junos PyEZ 在以下情况下尽可能使用 SAX 解析:

  • 使用可操作的表和视图检索结构化输出时

  • 当您 use_filter=True 在给定会话的实例中包含 Device() 参数并执行从 XML 输出请求标记值子集的操作时

例如,以下脚本执行 get_interface_information RPC 并筛选 XML 输出,以仅 <name> 返回每个物理接口的元素。在这种情况下,将使用 SAX 分析,因为只请求 XML 的一个子集。