Podczas wykonywania skryptów powłoki dane zwykle znajdują się w plikach rekordów jednowierszowych, takich jak csv. Obsługa tych danych za pomocą grep
i jest naprawdę prosta sed
. Ale często mam do czynienia z XML, więc naprawdę chciałbym mieć dostęp do skryptów do tych danych XML za pośrednictwem wiersza poleceń. Jakie są najlepsze narzędzia?
xml
command-line
scripting
Joseph Holsten
źródło
źródło
Odpowiedzi:
Zauważyłem, że xmlstarlet jest całkiem niezły w tego typu sprawach.
http://xmlstar.sourceforge.net/
Powinien być również dostępny w większości repozytoriów dystrybucji. Wprowadzający poradnik jest tutaj:
http://www.ibm.com/developerworks/library/x-starlet.html
źródło
Kilka obiecujących narzędzi:
nokogiri : parsowanie HTML / XML DOM w Rubim przy użyciu selektorów XPath i CSS
hpricot : przestarzałe
fxgrep : używa własnej składni podobnej do XPath do wykonywania zapytań dotyczących dokumentów. Napisany w SML, więc instalacja może być trudna.
LT XML : XML Toolkit pochodzące z narzędzi SGML, w tym
sggrep
,sgsort
,xmlnorm
i innych. Używa własnej składni zapytania. Dokumentacja jest bardzo formalna. Napisany w C. LT XML 2 twierdzi, że obsługuje XPath, XInclude i inne standardy W3C.xmlgrep2 : proste i wydajne wyszukiwanie za pomocą XPath. Napisane w Perlu przy użyciu XML :: LibXML i libxml2.
XQSharp : obsługuje XQuery, rozszerzenie XPath. Napisany dla .NET Framework.
xml-coreutils : zestaw narzędzi Lairda Breyera będący odpowiednikiem GNU coreutils. Omówiono w interesującym eseju na temat tego, co powinien zawierać idealny zestaw narzędzi.
xmldiff : Proste narzędzie do porównywania dwóch plików xml.
xmltk : nie wydaje się mieć pakietu w debianie, ubuntu, fedorze lub macports, nie ma wydania od 2007 roku i używa nieprzenośnej automatyzacji kompilacji.
xml-coreutils wydaje się najlepiej udokumentowanym i najbardziej zorientowanym na UNIX.
źródło
Do znakomitej listy Josepha Holstena dodaję skrypt wiersza poleceń xpath, który jest dostarczany z biblioteką Perla XML :: XPath. Świetny sposób na wyodrębnienie informacji z plików XML:
źródło
-q -e
opcji. Przykład: pobierz wartość atrybutu „pakiet” z węzła „manifest” w „AndroidManifest.xml”:xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
Jest też
xml2
i2xml
para. Pozwoli to zwykłym narzędziom do edycji ciągów na przetwarzanie XML.Przykład. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PS Są też
html2
/2html
.źródło
2xml
Może również łatwo odtworzyć XML z częściowych (przefiltrowanych)xml2
danych wyjściowych.cat foo.xml | xml2 | grep /bar | 2xml
- daje taką samą strukturę jak oryginał, ale wszystkie elementy zostały usunięte z wyjątkiem elementów "bar". Niesamowite.Możesz użyć xmllint:
Powinien być dołączony do większości dystrybucji, a także w pakiecie z Cygwin.
Widzieć:
źródło
--xpath
argumentu zaxmllint
: manpagez.com/man/1/xmllint--xpath
to całkiem nowy dodatek i np. Nie w wersjach RHEL 6xmllint
.xmllint --xpath
został wprowadzony w libxml2 2.7.7 (w 2010 roku).Jeśli szukasz rozwiązania w systemie Windows, Powershell ma wbudowaną funkcję odczytu i zapisu XML.
test.xml:
Skrypt PowerShell:
testNew.xml:
Źródło: /server/26976/update-xml-from-the-command-line-windows
źródło
xps $doc .root.one
xps $doc 'AppendChild("three")'
ixps $doc '.three.set_InnerText("And don't you forget it!")'
, co jest wyraźnie gorsze!Istnieją również xmlsed i xmlgrep z NetBSD xmltools!
http://blog.huoc.org/xmltools-not-dead.html
źródło
Zależy dokładnie od tego, co chcesz zrobić.
XSLT może być drogą do zrobienia, ale jest krzywa uczenia się. Wypróbuj xsltproc i pamiętaj, że możesz podać parametry.
źródło
Jest również
saxon-lint
z wiersza poleceń z możliwością korzystania z XPath 3.0 / XQuery 3.0. (Inne narzędzia wiersza polecenia używają XPath 1.0).PRZYKŁADY:
http / html:
xml:
źródło
D. Bohdan utrzymuje repozytorium GitHub o otwartym kodzie źródłowym, które przechowuje listę narzędzi wiersza poleceń dla narzędzi tekstu strukturalnego, jest tam sekcja dotycząca narzędzi XML / HTML:
https://github.com/dbohdan/structured-text-tools#xml-html
źródło
XQuery może być dobrym rozwiązaniem. Jest (stosunkowo) łatwy do nauczenia i jest standardem W3C.
Polecam XQSharp dla procesora wiersza komend.
źródło
Najpierw użyłem xmlstarlet i nadal go używam. Gdy kwerenda pobiera trudne, muszę XML xpath2 i xquery funkcji wsparcia zwracam się do xidel http://www.videlibri.de/xidel.html
źródło
Odpowiednik Grepa
Możesz zdefiniować funkcję bash, powiedz „xp” („xpath”), która otacza kod Pythona3. Aby z niego skorzystać, musisz zainstalować python3 i python-lxml. Korzyści:
Jest to łatwe i wydajne w użyciu w następujący sposób:
xp () wygląda mniej więcej tak:
Sed Equivalent
Rozważ użycie xq, które daje ci pełną moc "języka programowania" jq. Jeśli masz zainstalowany python-pip, możesz zainstalować xq za pomocą pip install yq , a następnie w poniższym przykładzie zamieniamy „Keep Accounts” na „Keep Accounts 2”:
źródło
JEdit posiada wtyczkę o nazwie „XQuery”, która zapewnia funkcjonalność zapytań o dokumenty XML.
Niezupełnie wiersz poleceń, ale działa!
źródło
grep(1)
.