xmllint: syntaxe, XSD a formátování
xmllint --nonet --noout data.xml
xmllint --nonet --noout --schema data.xsd data.xml
xmllint --nonet --format data.xml
xmllint --nonet --xpath "count(/objednavka/polozka)" data.xml První příkaz kontroluje dobře formovaný dokument, druhý schéma. --nonet u starších libxml2 omezuje síť, nikoli obecně přístup k místním souborům; v libxml2 2.15 a novějších už podle manuálu nemá účinek. Nepřidávej --noent ani --xinclude pro nedůvěryhodné XML. Bezpečnost a limity verze libxml2 ověř v manuálu.
XMLStarlet: výběr hodnot s prefixy
xmlstarlet sel -N o=urn:objednavky -t -m /o:objednavka/o:polozka -v @nazev -n data.xml Prefix o v dotazu je svázán s URI a nemusí odpovídat původnímu prefixu. Výstup s -v je text; pokud potřebuješ XML, vyber odpovídající kopírování uzlu. XMLStarlet používá pro výběry XPath 1.0.
jq: výběr a transformace JSON
jq . data.json
jq -r '.polozky[] | .nazev' data.json
jq '[.polozky[] | select(.cena >= 100)]' data.json
jq -e 'type == "object" and has("polozky")' data.json -r vypíše řetězce bez JSON uvozovek, takže výstup nemusí být JSON. -e vyhodnocuje návratový kód podle výsledku; ve skriptu kontroluj také selhání parseru. jq není plný JSON Schema validátor.
yq a xq: ověř správný program
Mike Farah yq je samostatný program s vlastním jazykem, zatímco kislyuk/yq je wrapper jq a poskytuje také xq pro XML. Jejich přepínače a datové modely nejsou stejné.
yq --version
# Mike Farah yq: převod YAML do JSON
yq -o=json '.' data.yaml
# kislyuk/yq: XML do objektového modelu a výběr jq
xq '.objednavka' data.xml Převod XML na JSON může změnit atributy, opakované elementy, čísla i smíšený obsah. Vyzkoušej způsob převodu na typických vstupních datech. Příjemce musí používat stejné názvy klíčů a stejně vykládat atributy i seznamy.
Bezpečný provoz ve skriptu
- Cituj názvy souborů a neposílej cizí text přes eval.
- Před zpracováním omez velikost, síť a oprávnění procesu.
- Kontroluj návratový kód každého kroku.
- Výstup ukládej do jiného souboru a původní nahraď až po úspěšném ověření.
Dokumentaci najdeš v manuálu xmllint, XMLStarlet a jq.