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


Answers

몇 가지 유망한 도구 :

  • 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 지향적 인 것 같습니다.

Question

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




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



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




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

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




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




또한 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 있습니다.




Links