web-dev-qa-db-ja.com

GrepおよびSed XMLコマンドライン処理と同等

シェルスクリプトを実行する場合、通常、データはcsvなどの単一行レコードのファイルに格納されます。 grepsedを使用してこのデータを処理するのは本当に簡単です。しかし、XMLを頻繁に処理する必要があるため、コマンドラインを介してXMLデータへのアクセスをスクリプト化する方法が本当に必要です。最高のツールは何ですか?

144
Joseph Holsten

私はxmlstarletがこの種のものにかなり優れていることを発見しました。

http://xmlstar.sourceforge.net/

ほとんどのディストリビューションリポジトリでも利用できるはずです。入門チュートリアルはこちらです:

http://www.ibm.com/developerworks/library/x-starlet.html

101
Russ

いくつかの有望なツール:

  • nokogiri :XPathおよびCSSセレクターを使用してRubyのHTML/XML DOMを解析する

  • hpricot :非推奨

  • fxgrep :独自のXPathのような構文を使用してドキュメントをクエリします。 SMLで記述されているため、インストールが難しい場合があります。

  • LT XMLsggrepsgsortxmlnormなどを含むSGMLツールから派生したXMLツールキット。独自のクエリ構文を使用します。ドキュメントは正式なveryです。 C. LT XML 2は、XPath、XInclude、およびその他のW3C標準のサポートを主張しています。

  • xmlgrep2 :XPathを使用したシンプルで強力な検索。 XML :: LibXMLおよびlibxml2を使用してPerlで記述されています。

  • XQSharp :XPathの拡張機能であるXQueryをサポートします。 .NET Framework用に作成されています。

  • xml-coreutils :GNU coreutilsと同等のLaird Breyerのツールキット。理想的なツールキットに含めるべきものに関する興味深い エッセイ で議論されています。

  • xmldiff :2つのxmlファイルを比較するためのシンプルなツール。

  • xmltk :debian、ubuntu、Fedora、またはmacportsにはパッケージがないようで、2007年以降リリースされておらず、移植性のないビルド自動化を使用しています。

xml-coreutilsは、文書化されており、ほとんどがUNIX指向です。

34
Joseph Holsten

もあります xml2および2xmlペア。通常の文字列編集ツールでXMLを処理できます。

例。 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>

追伸もあります html2/2html

24
Vi.

Joseph Holstenのすばらしいリストに、PerlライブラリXML :: XPathに付属するxpathコマンドラインスクリプトを追加します。 XMLファイルから情報を抽出する優れた方法:

 xpath -q -e '/entry[@xml:lang="fr"]' *xml
23
bortzmeyer

Xmllintを使用できます。

xmllint --xpath //title books.xml

ほとんどのディストリビューションにバンドルされている必要があり、Cygwinにもバンドルされています。

$ xmllint --version
xmllint: using libxml version 20900

見る:

$ 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
12
Dave Jarvis

Windowsでソリューションを探している場合、PowershellにはXMLを読み書きするための組み込み機能があります。

test.xml:

<root>
  <one>I like applesauce</one>
  <two>You sure bet I do!</two>
</root>

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>

ソース: https://serverfault.com/questions/26976/update-xml-from-the-command-line-windows

7
Clay

NetBSD xmltoolsのxmlsedおよびxmlgrepもあります!

http://blog.huoc.org/xmltools-not-dead.html

7
taggo

正確に何をしたいかに依存します。

XSLTを使用する方法もありますが、学習曲線があります。 xsltproc を試して、パラメーターを渡すことができることに注意してください。

5
Adrian Mouat

コマンドラインからsaxon-lintもあります XPath 3.0/XQuery 3.0を使用する機能があります。 (他のコマンドラインツールはXPath 1.0を使用します)。

例:

http/html:

$ saxon-lint --html --xpath 'count(//a)' http://stackoverflow.com/q/91791
328

xml:

$ saxon-lint --xpath '//a[@class="x"]' file.xml
3
Gilles Quenot

XQueryは良い解決策かもしれません。これは(比較的)学習しやすく、W3C標準です。

コマンドラインプロセッサには XQSharp をお勧めします。

2
Oliver Hallam

私は最初にxmlstarletを使用し、それを引き続き使用しました。クエリが困難になると、XMLのxpath2およびxquery機能サポートが必要になります xidelhttp://www.videlibri.de/xidel.html

1
typelogic