Odpowiedniki Grep i Sed do przetwarzania wiersza poleceń XML
Podczas wykonywania skryptów powłoki, zazwyczaj Dane będą w plikach pojedynczych rekordów, takich jak csv. Obsługa tych danych jest bardzo prosta za pomocą grep
i sed
. Ale mam do czynienia z XML często, więc naprawdę chciałbym sposób skrypt dostępu do danych XML za pomocą wiersza poleceń. Jakie są najlepsze narzędzia?
13 answers
Uważam, że xmlstarlet jest całkiem dobry w tego typu sprawach.
Http://xmlstar.sourceforge.net/
Powinny być również dostępne w większości repozytoriów distro. Tutorial wprowadzający znajduje się tutaj:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 12:14:07
Niektóre obiecujące narzędzia:
-
Nokogiri : parsowanie domów HTML / XML w ruby przy użyciu selektorów XPath & CSS
-
Hpricot: deprecated
Fxgrep : Używa własnej składni podobnej do XPath do odpytywania dokumentów. Napisane w SML, więc instalacja może być trudna.
LT XML : XML toolkit wywodzący się z narzędzi SGML, w tym
sggrep
,sgsort
, I inni Używa własnej składni zapytań. Dokumentacja jest Bardzo formalne. 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 za pomocą XML:: LibXML i libxml2.
XQSharp : Obsługuje XQuery, rozszerzenie do XPath. Napisany dla. NET Framework.
Xml-coreutils : Zestaw narzędzi Lairda Breyera, odpowiednik GNU coreutils. Omówione w ciekawe esej o tym, co powinien zawierać idealny zestaw narzędzi.
Xmldiff : Proste narzędzie do porównywania dwóch plików xml.
Xmltk: wydaje się, że nie ma pakietu w Debianie, ubuntu, Fedorze lub macports, nie ma Wydania od 2007 roku i używa niestandardowej automatyzacji budowania.
XML-coreutils wydaje się najlepiej udokumentowanym i najbardziej zorientowanym na Uniksa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 01:24:44
Istnieje również xml2
i 2xml
para. Pozwoli to zwykłym narzędziom do edycji łańcuchów przetwarzać XML.
Przykład. q.xml:
<?xml version="1.0"?>
<foo>
text
more text
<textnode>ddd</textnode><textnode a="bv">dsss</textnode>
<![CDATA[ asfdasdsa <foo> sdfsdfdsf <bar> ]]>
</foo>
xml2 < q.xml
/foo=
/foo= text
/foo= more text
/foo=
/foo/textnode=ddd
/foo/textnode
/foo/textnode/@a=bv
/foo/textnode=dsss
/foo=
/foo= asfdasdsa <foo> sdfsdfdsf <bar>
/foo=
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
<bar><baz><textnode>ddd</textnode><textnode a="bv">dsss</textnode></baz></bar>
P. S. są też html2
/ 2html
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-29 09:31:10
Do doskonałej 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:
xpath -q -e '/entry[@xml:lang="fr"]' *xml
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-04 08:12:52
Możesz użyć xmllint:
xmllint --xpath //title books.xml
Powinien być dołączony do większości dystrybucji, a także do Cygwina.
$ xmllint --version
xmllint: using libxml version 20900
Zobacz:
$ xmllint
Usage : xmllint [options] XMLfiles ...
Parse the XML files and output the result of the parsing
--version : display the version of the XML library used
--debug : dump a debug tree of the in-memory document
...
--schematron schema : do validation against a schematron
--sax1: use the old SAX1 interfaces for processing
--sax: do not build a tree but work just at the SAX level
--oldxml10: use XML-1.0 parsing rules before the 5th edition
--xpath expr: evaluate the XPath expression, inply --noout
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-18 17:52:14
Istnieje również xmlsed & xmlgrep z NetBSD xmltools!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-30 12:20:37
Zależy od tego, co dokładnie chcesz zrobić.
XSLT może być drogą do zrobienia, ale jest krzywa uczenia się. Spróbuj xsltproc i zauważ, że możesz podać parametry.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 20:41:16
Jeśli szukasz rozwiązania dla Windows, Powershell ma wbudowaną funkcjonalność do odczytu i zapisu XML.
Test.xml:
<root>
<one>I like applesauce</one>
<two>You sure bet I do!</two>
</root>
Skrypt Powershell:
# load XML file into local variable and cast as XML type.
$doc = [xml](Get-Content ./test.xml)
$doc.root.one #echoes "I like applesauce"
$doc.root.one = "Who doesn't like applesauce?" #replace inner text of <one> node
# create new node...
$newNode = $doc.CreateElement("three")
$newNode.set_InnerText("And don't you forget it!")
# ...and position it in the hierarchy
$doc.root.AppendChild($newNode)
# write results to disk
$doc.save("./testNew.xml")
TestNew.xml:
<root>
<one>Who likes applesauce?</one>
<two>You sure bet I do!</two>
<three>And don't you forget it!</three>
</root>
Źródło: https://serverfault.com/questions/26976/update-xml-from-the-command-line-windows
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:13:47
XQuery może być dobrym rozwiązaniem. Jest (stosunkowo) łatwy do nauczenia i jest standardem W3C.
Polecam XQSharp dla procesora linii poleceń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-03 20:59:32
Istnieje również saxon-lint
z linii poleceń z możliwością użycia XPath 3.0/XQuery 3.0. (Inne narzędzia wiersza poleceń używają XPath 1.0).
Przykłady:
Http / html:
$ saxon-lint --html --xpath 'count(//a)' http://stackoverflow.com/q/91791
328
Xml:
$ saxon-lint --xpath '//a[@class="x"]' file.xml
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-13 03:32:08
JEdit posiada wtyczkę o nazwie "XQuery", która zapewnia funkcjonalność zapytań dla dokumentów XML.
Nie do końca wiersza poleceń, ale to działa!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 11:47:15
Zdecyduj, jakie operacje chcesz wykonać na plikach XML i Utwórz skrypt (w Pythonie, perlu), który ujawnia tę funkcjonalność poprzez argumenty do użycia skryptów powłoki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 12:12:47
Pierwszy raz użyłem xmlstarlet i nadal go używam. Gdy zapytanie staje się trudne, potrzebuję obsługi funkcji XML xpath2 i XQuery zamieniam na xidel http://www.videlibri.de/xidel.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-16 03:21:13