XML 명령 행 처리에 대한 Grep 및 Sed Equivalent


Answers

나는 xmlstarlet이 이런 종류의 일을 꽤 잘한다는 것을 발견했다.

http://xmlstar.sourceforge.net/

대부분의 배포판 저장소에서도 사용할 수 있어야합니다. 소개 자습서는 다음과 같습니다.

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

Question

쉘 스크립팅을 수행 할 때 일반적으로 데이터는 csv와 같은 단일 행 레코드 파일에 있습니다. grepsed 로이 데이터를 처리하는 것은 정말 간단합니다. 하지만 XML을 자주 다루므로 커맨드 라인을 통해 XML 데이터에 대한 스크립트를 작성하는 방법이 정말 필요합니다. 가장 좋은 도구는 무엇입니까?







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



정확히 무엇을하고 싶은지에 달려 있습니다.

XSLT가 될 수 있지만 학습 곡선이 있습니다. xsltproc 하고 매개 변수를 입력 할 수 있습니다.




JEdit에는 XML 문서에 쿼리 기능을 제공하는 "XQuery"라는 플러그인이 있습니다.

명령 줄은 아니지만 작동합니다!




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




XML 파일에서 수행 할 작업을 결정하고 사용할 셸 스크립트의 인수를 통해 해당 기능을 제공하는 스크립트 (예 : Python, Perl)를 만듭니다.




XPath 3.0 / XQuery 3.0을 사용할 수있는 명령 행의 saxon-lint 도 있습니다 . (다른 명령 줄 도구는 XPath 1.0을 사용합니다.)

예 :

http / html :

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

xml :

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



XQuery는 좋은 해결책이 될 수 있습니다. 그것은 (상대적으로) 배우기 쉽고 W3C 표준입니다.

명령 줄 프로세서에 XQSharp 를 권하고 싶습니다.




또한 xml22xml 쌍이 있습니다. 보통의 문자열 편집 도구로 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 있습니다.




Joseph Holsten의 우수한 목록에 Perl 라이브러리 XML :: XPath와 함께 제공되는 xpath 명령 줄 스크립트를 추가합니다. XML 파일에서 정보를 추출하는 가장 좋은 방법은 다음과 같습니다.

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



먼저 xmlstarlet 을 사용했지만 여전히 사용하고 있습니다. 쿼리가 어려워 질 때 xidel2xquery 기능 지원이 필요합니다. xidel http://www.videlibri.de/xidel.html




몇 가지 유망한 도구 :

  • nokogiri : XPath 및 CSS 선택기를 사용하여 루비에서 HTML / XML DOM 구문 분석하기

  • hpricot : 더 이상 사용되지 않음

  • fxgrep : XPath와 유사한 구문을 사용하여 문서를 쿼리합니다. SML로 작성되었으므로 설치가 어려울 수 있습니다.

  • LT XML : sggrep , sgsort , xmlnorm 및 기타를 포함하여 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의 툴킷. 이상적인 툴킷이 포함해야하는 것에 대한 흥미로운 essay 토론되었습니다.

  • xmldiff : 두 xml 파일을 비교하기위한 간단한 도구.

  • xmltk : debian, 우분투, 페도라, 또는 macports에 패키지가없는 것 같아요, 2007 년부터 릴리스가 없었고, 이식성이없는 빌드 자동화를 사용합니다.

xml-coreutils는 최고의 문서화되고 UNIX 지향적 인 것 같습니다.