Angeben des XML-Parsers für eine Junos PyEZ-Sitzung
ZUSAMMENFASSUNG Erfahren Sie, wie Junos PyEZ für bestimmte Vorgänge verschiedene XML-Parser verwendet, um die Speichernutzung und Verarbeitungsgeschwindigkeit zu optimieren.
Extensible Markup Language (XML) ist ein Standard für die Darstellung und Kommunikation von Informationen. Es handelt sich um eine Metasprache zur Definition benutzerdefinierter Tags, die auf einen Datensatz oder ein Dokument angewendet werden, um die Funktion einzelner Elemente zu beschreiben und die hierarchischen Beziehungen zwischen ihnen zu kodifizieren. Junos OS unterstützt XML nativ für den Betrieb und die Konfiguration von Junos-Geräten.
Clientanwendungen verwenden XML-Parser, um XML-Dokumente zu lesen und mit ihnen zu arbeiten, z. B. die Befehlsausgabe oder Konfigurationsdaten, die als XML in der RPC-Antwort eines Junos-Geräts zurückgegeben werden. XML-Parser können verschiedene Ansätze verwenden, um ein XML-Dokument zu analysieren. DOM-Parser (Document Object Model) erstellen eine Baumdarstellung des gesamten XML-Dokuments, das vollständig in den Arbeitsspeicher geladen wird. Im Gegensatz dazu führt ein SAX-Parser (Simple API for XML) eine ereignisbasierte Analyse durch und analysiert jeden Teil des XML-Dokuments nacheinander. Dies hat zur Folge, dass SAX-Parser immer nur einen kleinen Teil der XML-Daten in den Arbeitsspeicher laden.
SAX-Parser benötigen nicht viel Speicher, um Operationen auszuführen, aber die Speicheranforderungen an DOM-Parser steigen mit der Dokumentgröße. Im Allgemeinen ist die DOM-Analyse schneller als die SAX-Analyse, da die Anwendung auf das gesamte XML-Dokument im Arbeitsspeicher zugreifen kann. Mit zunehmender Größe des XML-Dokuments benötigen DOM-Parser jedoch mehr Speicher, und die SAX-Analyse wird effizienter.
Junos PyEZ verwendet die ncclient
Python-Bibliothek, die standardmäßig DOM-Parsing für die XML-Verarbeitung verwendet. In diesem Fall konvertiert der Parser das gesamte XML-Dokument in ein lxml
Objekt und lädt es in den Arbeitsspeicher. Junos-Geräte können große XML-Dokumente für die Ausgabe des Befehls show und Konfigurationsdaten zurückgeben. Wenn Sie in diesen Fällen nur eine kleine Teilmenge von Werten aus dem XML-Code abrufen müssen, kann die DOM-Analyse ineffizient sein.
Ab Junos PyEZ Version 2.3.0 verwendet Junos PyEZ SAX-Parsing, wenn dies in den folgenden Fällen möglich ist:
Wenn Sie operative Tabellen und Sichten verwenden, um strukturierte Ausgaben abzurufen
Wenn Sie das Argument
use_filter=True
in dieDevice()
Instanz für eine bestimmte Sitzung einschließen und Vorgänge ausführen, die eine Teilmenge von Tag-Werten aus der XML-Ausgabe anfordern
Das folgende Skript führt z. B. den get_interface_information
RPC aus und filtert die XML-Ausgabe, um nur das <name>
Element für jede physische Schnittstelle zurückzugeben. In diesem Fall wird die SAX-Analyse verwendet, da nur eine Teilmenge des XML-Codes angefordert wird.
from jnpr.junos import Device from lxml import etree with Device(host='router.example.com', use_filter=True) as dev: sax_input = '<interface-information><physical-interface><name/></physical-interface></interface-information>' result = dev.rpc.get_interface_information(filter_xml=sax_input) print (etree.tostring(result, encoding='unicode'))