Analysieren Sie XML in Bash

MD Aminul Islam 20 Juni 2023
  1. Verwenden Sie xmllint, um XML in Bash zu parsen
  2. Verwenden Sie XMLStarlet, um XML in Bash zu parsen
Analysieren Sie XML in Bash

Einen Entwickler zu finden, der immer noch nicht mit XML arbeitet, ist fast unmöglich. Es ist eine beliebte Auszeichnungssprache, die häufig zum Strukturieren und Übertragen von Daten verwendet wird.

Dieser Artikel zeigt, wie wir XML durch Bash parsen können.

Wir werden hier über zwei Bibliotheken sprechen. Unsere erste Bibliothek ist xmllint und die zweite ist bekannt als XMLStarlet.

Sie müssen sie installieren, bevor Sie damit arbeiten können.

Verwenden Sie xmllint, um XML in Bash zu parsen

Dies ist die am häufigsten verwendete Bibliothek, die zum Analysieren der XML-Datei verwendet werden kann. Sie müssen die Bibliothek jedoch herunterladen und installieren, bevor Sie sie verwenden können.

Um diese Bibliothek zu installieren, müssen Sie die folgenden Befehle ausführen.

sudo apt-get update -qq
sudo apt-get install -y libxml2-utils

Sie müssen das Paket libxml2-utils mit dem apt-get installieren.

Wenn Sie eine XML-Datei mit dem Namen MyXML.xml haben, können Sie die XML einfach mit dem folgenden Befehl abrufen.

xmllint MyXML.xml

Nachdem Sie den obigen Befehl ausgeführt haben, erhalten Sie eine Ausgabe wie die folgende.

<?xml version="1.0"?>
<specification>
        <type>Laptop</type>
        <model>Macbook</model>
        <screenSizeInch>14</screenSizeInch>
</specification>

Diese Bibliothek enthält einige Optionen oder Flags. Die verfügbaren Optionen für die Bibliothek werden unten geteilt.

  1. --auto - Dieses Flag dient zum Generieren eines Dokuments zum Testen.
  2. --catalogs – Dieses Flag dient zur Verwendung der Kataloge aus SGML_CATALOG_FILES. Ansonsten wird standardmäßig /etc/xml/catalog verwendet.
  3. --chkregister – Dieses Flag dient zum Aktivieren der Knotenregistrierung.
  4. --compress – Dieses Flag dient zum Aktivieren der gzip-Komprimierung der Ausgabe.
  5. --copy – Dieses Flag dient zum Testen der internen Kopierimplementierung.
  6. --c14n – Dieses Flag dient zur Verwendung der W3C-XML-Kanonisierung (C14N), die das Ergebnis der Analyse durch stdout serialisiert. Es hält auch Kommentare im Ergebnis.
  7. --dtdvalid URL – Dieses Flag dient zur Verwendung der durch die URL angegebenen DTD zur Validierung.
  8. --dtdvalidfpi FPI – Dieses Flag dient zur Verwendung der DTD, die eine öffentliche Kennung FPI für die Validierung angibt; Bitte beachten Sie, dass dieses Flag einen Katalogexport erfordert, der als öffentlicher Bezeichner fungiert, um zu funktionieren.
  9. --debug – Dieses Flag dient zum Analysieren einer Datei. Es gibt auch einen kommentierten Baum aus, der die In-Memory-Version des Dokuments ist.
  10. --debugent – Dieses Flag dient zum Debuggen der im Dokument definierten Entitäten.
  11. --dropdtd – Dieses Flag dient zum Entfernen von DTD aus der Ausgabe.
  12. --dtdattr – Dieses Flag ruft eine externe DTD ab. Außerdem wird der Baum mit geerbten Attributen gefüllt.
  13. --encode – Dieses Flag liefert die Ausgabe in der angegebenen Kodierung.
  14. --format – Dieses Flag formatiert die Ausgabe neu und rückt sie neu ein.
  15. --help – Dieses Flag gibt eine Zusammenfassung der Verwendung von xmllint aus.
  16. --html – Dieses Flag dient zur Verwendung des HTML-Parsers.
  17. --htmlout – Dieses Flag zeigt das Ergebnis als HTML-Datei an. Es werden die erforderlichen HTML-Tags rund um die Ergebnisbaumausgabe ausgegeben, sodass die Ergebnisse in einem Browser angezeigt/angesehen werden können.
  18. --insert – Dieses Flag dient zum Testen gültiger Einfügungen.
  19. --loaddtd – Dieses Flag dient zum Abrufen der externen DTD.
  20. --load-trace – Dieses Flag zeigt alle Dokumente an, die bei der Verarbeitung in stderr geladen wurden.
  21. --maxmem NNBYTES – Dieses Flag dient zum Testen der Parser-Speicherunterstützung. Hier ist NNBYTES die maximale Anzahl von Bytes, die die Bibliothek zuweisen kann.
  22. --memory – Dieses Flag dient zum Parsen aus dem Speicher.
  23. --noblanks – Dieses Flag lässt ignorierbare Leerzeichen fallen.
  24. --nocatalogs – Dieses Flag legt fest, dass keine Kataloge verwendet werden.
  25. --nocdata – Dieses Flag ersetzt den Abschnitt CDATA durch entsprechende Textknoten.
  26. --noent – Dieses Flag ersetzt Entity-Werte für Entity-Referenzen.
  27. --nonet – Dieses Flag legt fest, dass das Internet nicht zum Abrufen von DTDs oder Entitäten verwendet werden soll.
  28. --noout - Dieses Flag unterdrückt die Ausgabe. xmllint zeigt standardmäßig die Ausgabe des Ergebnisbaums.
  29. --nowaring – Dieses Flag gibt an, keine Warnungen vom Validator und/oder Parser auszugeben.
  30. --nowrap – Dieses Flag legt fest, dass kein HTML-Doc-Wrapper ausgegeben wird.
  31. --noxincludenod – Dieses Flag dient der XInclude-Verarbeitung, gibt aber an, die XInclude-Start- und Endknoten nicht zu generieren.
  32. --nsclean – Dieses Flag entfernt redundante Namespace-Deklarationen.
  33. --output FILE – Dieses Flag definiert einen Dateipfad, in dem xmllint das Ergebnis der Analyse speichert.
  34. --path "PATH(S)" – Dieses Flag dient dazu, die (durch Doppelpunkte oder Leerzeichen getrennte) Liste von Dateisystem-Pfads zu verwenden, die durch PATHS zum Laden von DTDs oder Entitäten angegeben werden. Hier werden durch Leerzeichen getrennte Listen in Anführungszeichen eingeschlossen.
  35. --pattern PATTERNVALUE – Dieses Flag dient zum Ausführen der Mustererkennungsmaschine, die mit einer Leserschnittstelle verwendet werden kann. Es wird auch zum Debuggen verwendet.
  36. --postvalid – Dieses Flag dient zur Validierung, nachdem das Parsen abgeschlossen ist.
  37. --push – Dieses Flag aktiviert den --push-Modus.
  38. --recover – Dieses Flag dient zum Ausgeben aller parsbaren Teile des ungültigen Dokuments.
  39. --relaxng SCHEMA – Dieses Flag verwendet eine RelaxNG-Datei namens SCHEMA zur Validierung.
  40. --repeat – Dieses Flag dient zum 100-maligen Wiederholen für Timing oder Profiling.
  41. --schema – Dieses Flag verwendet die als SCHEMA bekannte W3C-XML-Schemadatei.
  42. --shell – Führt eine Navigationsshell aus.
  43. --stream – Dieses Flag dient zum Streamen der API.
  44. --testIO – Dieses Flag testet die Unterstützung der Benutzereingabe/-ausgabe.
  45. --timing – Dieses Flag gibt Informationen über die Zeit aus, die xmllint benötigt, um die verschiedenen Schritte auszuführen.
  46. --valid – Dieses Flag prüft die Gültigkeit des Dokuments.
  47. --version – Dieses Flag zeigt die Version der Bibliothek an.
  48. --walker – Dieses Flag testet das Modul walker
  49. --xinclude – Dieses Flag führt die XInclude-Verarbeitung durch.
  50. --xmlout - Dieses Flag wird hauptsächlich in Verbindung mit --html verwendet. Das Dokument wird mit dem XML-Serialisierungsprogramm gespeichert. Es wird hauptsächlich verwendet, um von HTML nach XHTML zu konvertieren.

Verwenden Sie XMLStarlet, um XML in Bash zu parsen

Eine weitere beliebte Bibliothek zum Parsen von XML-Dokumenten ist als XMLStarlet bekannt. Der primäre Befehl der Bibliothek ist xmlstarlet.

Sie müssen den folgenden Befehl als Root ausführen, um diese Bibliothek zu installieren.

sudo dnf install xmlstarlet

Es enthält nützliche Optionen, die das Validieren, Transformieren oder Abfragen von XML-Dateien vereinfachen. Sie können eine XML-Datei ganz einfach über den einfachsten Befehl der Bibliothek abrufen.

xmlstarlet format MyXML.xml

Nachdem Sie den obigen Befehl ausgeführt haben, sehen Sie den Inhalt der XML-Datei als Ausgabe wie unten.

<?xml version="1.0"?>
<specification>
        <type>Laptop</type>
        <model>Macbook</model>
        <screenSizeInch>14</screenSizeInch>
</specification>

Alle in diesem Artikel verwendeten Codes sind in Bash geschrieben. Es funktioniert nur in der Linux Shell-Umgebung.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn