GNU/Linux >> Znalost Linux >  >> Linux

Použijte XMLStarlet k analýze XML v terminálu Linux

Naučit se analyzovat XML je často považováno za složitý podnik, ale nemusí tomu tak být. XML je vysoce a přísně strukturované, takže je relativně předvídatelné. Existuje také spousta nástrojů, které vám pomohou zvládnout práci.

Jedním z mých oblíbených nástrojů XML je XMLStarlet, sada nástrojů XML pro váš terminál. Pomocí XMLStarlet můžete ověřovat, analyzovat, upravovat, formátovat a transformovat data XML. XMLStarlet je relativně minimální příkaz, ale navigace v XML je plná potenciálu, takže tento článek ukazuje, jak jej použít k dotazování na data XML.

Instalovat

XMLStarlet je standardně nainstalován na CentOS, Fedora a mnoho dalších moderních distribucí Linuxu, takže stačí otevřít terminál a napsat xmlstarlet pro přístup. Pokud XMLStarlet ještě není nainstalován, váš operační systém vám nabídne jeho instalaci.

Případně můžete nainstalovat xmlstarlet příkaz ze správce balíčků:

$ sudo dnf install xmlstarlet 

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

V systému macOS použijte MacPorts nebo Homebrew. V systému Windows použijte Chocolatey.

Pokud vše ostatní selže, můžete jej nainstalovat ručně ze zdrojového kódu na Sourceforge.

Analýza XML pomocí XMLStarlet

Existuje mnoho nástrojů navržených tak, aby pomáhaly analyzovat a transformovat data XML, včetně softwarových knihoven, které vám umožňují psát vlastní analyzátor a komplexní příkazy, jako je fop a xsltproc . Někdy však není potřeba zpracovávat data XML; potřebujete jen pohodlný způsob, jak z nich extrahovat důležitá data, aktualizovat je nebo je jen ověřit. Pro spontánní XML interakce používám xmlstarlet , klasická aplikace ve stylu „švýcarského nože“, která provádí nejběžnější úlohy XML. Můžete vidět, co nabízí, spuštěním příkazu spolu s --help možnost:

$ xmlstarlet --help
Použití:xmlstarlet [] []
kde je jedno z:
  ed    (nebo upravit )      – Upravit/aktualizovat dokumenty XML
  sel   (nebo vybrat)    – Vyberte data nebo dotazujte se na dokumenty XML (XPATH atd.)
  tr    (nebo transformujte) – Transformujte dokumenty XML) pomocí XSLT
  val   (nebo ověřit)  - Ověřit dokumenty XML (dobře zpracované/DTD/XSD/RelaxNG)
  fo    (nebo formát)    – Formátovat dokumenty XML
  el (nebo prvky)  - Zobrazení struktury prvků dokumentu XML
  c14n  (nebo kanonické)   - Kanonizace XML
  ls    (nebo seznam)      - Vypsat adresář jako XML
[...]

Další nápovědu získáte připojením --help na konec kteréhokoli z těchto dílčích příkazů:

$ xmlstarlet sel --help
  -Q nebo --quiet             – nezapisujte nic na standardní výstup.
  -C nebo --comp              - zobrazí generovaný XSLT
  -R nebo - -root              - tisk kořenového prvku
  -T nebo --text              - výstup je text (výchozí je XML)
  -I nebo --indent            - odsazení výstupu
[.. .]

Výběr dat pomocí sel

Data můžete zobrazit v XML pomocí xmlstarlet select (sel zkráceně) příkaz. Zde je jednoduchý dokument XML:



 
   

      Fedora
      7
      Moonshine
     
Živě
        Fedora
        Všechno
     

   


   
      Fedora Core
      6
      Zod

   
   

 
   

Při hledání dat v souboru XML je vaším prvním úkolem zaměřit se na uzel, který chcete prozkoumat. Pokud znáte cestu k uzlu, zadejte úplnou cestu pomocí --value-of volba. Čím dříve ve stromu DOM (Document Object Model) začnete prozkoumávat, tím více informací uvidíte:

$ xmlstarlet select --template \
--value-of /xml/os/linux/distribution \
--nl myfile.xml
      Fedora
      7
      Moonshine
     
        Živě
        Fedora
        Všechno     
     
      Fedora Core
    />  d před 6.

--nl znamená "nový řádek" a vkládá velké množství mezer, aby se zajistilo, že váš terminálový příkaz dostane nový řádek poté, co jsou k dispozici vaše výsledky. Odebral jsem část přebytečného místa ve výstupu vzorku.

Zúžte své zaměření sestupem dále do stromu DOM:

$ xmlstarlet select --template \
--value-of /xml/os/linux/distribution/name \
--nl myfile.xml
Fedora
Fedora Jádro

Podmíněné výběry

Jeden z nejvýkonnějších nástrojů pro navigaci a analýzu XML se nazývá XPath. Řídí syntaxi používanou při vyhledávání XML a vyvolává funkce z knihoven XML. XMLStarlet rozumí výrazům XPath, takže můžete svůj výběr podmínit funkcí XPath. XPath obsahuje velké množství funkcí a je to podrobně zdokumentováno W3C, ale dokumentaci XPath od Mozilly považuji za stručnější.

Hranaté závorky můžete použít jako testovací funkci, která porovnává obsah prvku s nějakou hodnotou. Zde je test hodnoty <name> element, který vrací číslo vydání spojené pouze s konkrétní shodou.

Představte si na okamžik, že ukázkový soubor XML obsahuje všechna vydání Fedory začínající 1. Chcete-li zobrazit všechna čísla vydání spojená se starým názvem „Fedora Core“ (od vydání 7 projekt vypustil z názvu „Core“):

$ xmlstarlet sel --template \
--value-of '/xml/os/linux/distribution[name ="Fedora Core"]/release' \
--nl myfile.xml
6
5
4
3
2
1

Změnou --value-of byste si mohli prohlédnout také všechna kódová jména těchto vydání cesta k /xml/os/linux/distribution[name = "Fedora Core"]/codename .

Přiřazení cest a získání hodnot

Výhodou zobrazení značek XML jako uzlů je, že jakmile uzel najdete, můžete si jej představit jako svůj aktuální „adresář“ dat. Ve skutečnosti to není adresář, alespoň ne ve smyslu souborového systému, ale je to sbírka dat, na která se můžete dotazovat. Abychom vám pomohli udržet cíl a data „uvnitř“ odděleně, XMLStarlet rozlišuje mezi tím, co se snažíte porovnat, pomocí --match a hodnotu požadovaných dat pomocí --value-of možnost.

Předpokládejme, že víte, že <spin> uzel obsahuje několik prvků. To z něj dělá váš cíl. Jakmile tam budete, můžete použít --value-of určete, pro který prvek chcete hodnotu. Chcete-li zobrazit všechny prvky, použijte tečku (. ), které bude představovat vaši aktuální polohu:

$ xmlstarlet sel --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '.' --nl myfile.xml \
Živě
Fedora
Vše

Stejně jako u navigace v DOM můžete použít výrazy XPath k omezení rozsahu vracených dat. V tomto příkladu používám last() funkce pro načtení pouze posledního prvku v spin uzel:

$ xmlstarlet select --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '*[last()]' --nl myfile.xml
Vše

V tomto příkladu používám position() funkce pro výběr konkrétního prvku v spin uzel:

$ xmlstarlet select --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '*[position() =2]' - -nl myfile.xml
Fedora

--match a --value-of možnosti se mohou překrývat, takže je jen na vás, jak je chcete společně používat. Tyto dva výrazy v případě vzorového XML dělají totéž:

$ xmlstarlet select  --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '.' \
--nl myfile.xml
Živě
Fedora
Vše     

$ xmlstarlet select --template \
--match '/ xml/os/linux/distribution' \
--value-of 'spin' \
--nl myfile.xml
Live
Fedora
Vše

Seznámení s XML

XML se může občas zdát příliš mnohomluvné a nepraktické, ale nástroje vytvořené pro interakci s ním mě neustále překvapují. Pokud chcete využít výhod XML, pak by XMLStarlet mohl být dobrým vstupním bodem. Až se příště chystáte otevřít soubor XML, abyste se podívali na strukturovaná data, zkuste použít XMLStarlet a zjistěte, zda se místo toho můžete dotazovat na tato data. Čím pohodlnější budete s XML, tím lépe vám může sloužit jako robustní a flexibilní datový formát.


Linux
  1. Zkopírujte soubory v terminálu Linux

  2. Přejmenujte soubor v terminálu Linux

  3. Přesunout soubory v terminálu Linux

  1. K navigaci v počítači použijte terminál Linux

  2. Pomocí terminálu Linux můžete zjistit, jaké soubory jsou ve vašem počítači

  3. Jak používat Linuxový příkaz grep

  1. Jak používat příkaz historie v Linuxu

  2. Poslouchejte rádio na linuxovém terminálu

  3. Který příkaz terminálu Linuxu používáte nejčastěji?