149

シェル スクリプトを実行する場合、通常、データは csv のような 1 行レコードのファイルになります。grepと を使用してこのデータを処理するのは非常に簡単sedです。しかし、私は頻繁に XML を扱わなければならないので、コマンド ラインを介してその XML データへのアクセスをスクリプト化する方法が本当に必要です。最適なツールは何ですか?

4

14 に答える 14

106

xmlstarletはこの種のことでかなり優れていることがわかりました。

http://xmlstar.sourceforge.net/

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

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

于 2008-09-18T12:14:07.213 に答える
37

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

  • nokogiri : XPath と CSS セレクターを使用して ruby​​ で HTML/XML DOM を解析する

  • hpricot : 非推奨

  • fxgrep : 独自の XPath に似た構文を使用してドキュメントをクエリします。SMLで書かれているので、インストールが難しいかもしれません。

  • LT XMLsggrep : 、sgsortxmlnormおよびその他を含む SGML ツールから派生した XML ツールキット。独自のクエリ構文を使用します。ドキュメントは 非常に形式的です。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 指向のようです。

于 2008-09-18T11:39:59.260 に答える
26

ペアも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>

html2PS /もあります2html

于 2010-06-22T22:01:13.587 に答える
25

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

 xpath -q -e '/entry[@xml:lang="fr"]' *xml
于 2009-03-04T08:12:52.080 に答える
16

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
于 2013-01-24T00:41:13.737 に答える
9

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

于 2013-07-29T21:29:56.547 に答える
8

NetBSD xmltools の xmlsed & xmlgrep もあります!

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

于 2011-05-30T12:20:37.760 に答える
6

正確に何をしたいかによって異なります。

XSLT が最適な方法かもしれませんが、習得には時間がかかります。xsltprocを試して、パラメーターを渡すことができることに注意してください。

于 2008-09-18T20:41:16.837 に答える
4

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
于 2015-01-12T14:48:08.333 に答える
3

XQuery は良い解決策かもしれません。(比較的) 習得が容易で、W3C 標準です。

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

于 2008-10-30T23:12:49.840 に答える
3

私は最初にxmlstarletを使用し、まだ使用しています。クエリが困難になると、XML のxpath2およびxquery機能のサポートが必要になります。xidel http://www.videlibri.de/xidel.htmlを参照します。

于 2017-03-16T03:21:13.483 に答える
-1

JEdi​​t には、XML ドキュメントのクエリ機能を提供する「XQuery」と呼ばれるプラグインがあります。

コマンドラインではありませんが、機能します。

于 2008-09-18T11:47:15.890 に答える